【发布时间】:2015-05-06 11:34:27
【问题描述】:
我正在尝试编写一个简单的游戏。我想设计一个“运动控制器”对象,它可以处理来自引擎的移动指令。我还希望该对象公开一个方法,该方法将检查其状态并返回真/假,具体取决于它是否准备好移动。状态将保存为一组布尔变量。由于它们很多,我决定将它们组合在一个名为“flags”的新结构中。这或多或少是这样的:
public class movContr
{
int movId;
public struct flags
{
bool isMoving;
bool isLocked;
bool isReady;
(...)
}
public bool CheckReadiness()
{
if(flags.isReady==true) return true;
return false;
}
}
现在的问题是这不会编译,错误是:
error CS0120: An object reference is required to access non-static member
违规行是:
if(flags.isReady==true) return true;
所以我猜 C# 不会将结构视为仅包含顺序变量的内存 blob,而是将其视为类的一些“特殊”表亲。
这是我的问题:
我应该如何处理访问结构类成员的方法?如何在类方法中引用其未来实例的成员?我尝试了这个:
if(this.flags.isReady==true) return true;
但我得到了同样的错误。
或者,如果使用 'struct' 封装我的标志变量不是正确的做法,那是什么?
我试图自己找到答案,但由于我能想到的所有关键字都非常通用,因此结果也是如此。大多数处理静态成员,这不是这里的解决方案,因为我需要 movContr 类的多个独立实例。
【问题讨论】:
-
我不确定你是否需要一个结构体。看起来您可以为该结构中的每个字段在您的类上创建属性或字段。
-
不敢相信它这么简单,抱歉我不能接受多个答案:( 有时候我觉得我应该坚持我发誓@juharr的汇编程序,因为这是很早的舞台和我的记忆力真的很差我想尽可能保持它的可读性以防我需要从项目中休息一下到 movContrObj.flags.isMoving,至少现在是这样
-
就我个人而言,我发现这里使用结构的可读性较差,但如果您对它更满意,那么就没有任何真正的伤害。
标签: c# struct member non-static