具有成员的 C# 静态成员类



>我有一些带有静态成员的类:

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; }
}

您还有一个额外的问题,因为BuildingABuildingB中的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; };
}

最新更新