>我有一些带有静态成员的类:
class BuildingA{
static BuildableComponent buildableA;
}
class BuildingB{
static BuildableComponent buildableB;
}
此静态成员有自己的成员:
class BuildableComponent{
int cost;
}
我希望能够通过 BuildingA 和BuildingB 类来操作静态的成员,例如 A.buildableA.cost 和 B.buildableB.cost - 我描述它的方式不太有效,但是有没有办法做到这一点?
字段在 C# 中默认是私有的 - 您需要向其添加public
访问修饰符:
class BuildableComponent
{
public int cost;
}
但是,按照@EamonnMcEvoy的建议,您可以将其设为属性:
class BuildableComponent
{
public int Cost { get; private set; }
}
建议使用属性,因为您可以从其他类中读取字段,而不允许其他类修改属性(正如我上面通过将 setter 设为私有所做的那样)。 它们还有其他优点,其中一个是如果需要,可以在派生类中重写它们。
在 C# 6 中,您还可以完全省略资源库,强制仅从构造函数设置值并使属性不可变:
class BuildableComponent
{
public BuildableComponent(int cost)
{
Cost = cost;
}
public int Cost { get; }
}
您还有一个额外的问题,因为BuildingA
和BuildingB
中的BuildableComponent
字段static
。 这意味着它们属于类,而不是类的实例(即类的每个实例共享相同的值)。 这意味着您需要通过类名而不是类的实例来访问它:
int cost = BuildingA.buildableA.cost;
在这种特殊情况下,我会问自己是否希望这个组件是静态的。 如果要创建多个BuildingA
实例,是否希望它们共享相同的组件? 如果没有,请使它们非静态。
在 c# 中,类上的成员默认为private
,因此cost
只能从BuildableComponent
的实例中访问。
您需要将public
访问修饰符添加到cost
字段中,或者更好的是,使其成为具有 get 和 set 的属性:
class BuildableComponent{
public int cost;
}
或
class BuildableComponent{
public int Cost { get; set; };
}