C#具有成员的静态成员类
我有一些带有静态成员的类:C#具有成员的静态成员类,c#,class,static,C#,Class,Static,我有一些带有静态成员的类: class BuildingA{ static BuildableComponent buildableA; } class BuildingB{ static BuildableComponent buildableB; } 此静态成员有自己的成员: class BuildableComponent{ int cost; } 我希望能够通过BuildingA和BuildingB类操纵静态对象的成员,例如A.BuildingA.cost和B.
class BuildingA{
static BuildableComponent buildableA;
}
class BuildingB{
static BuildableComponent buildableB;
}
此静态成员有自己的成员:
class BuildableComponent{
int cost;
}
我希望能够通过BuildingA和BuildingB类操纵静态对象的成员,例如A.BuildingA.cost和B.BuildingB.cost——我所描述的方式不太管用,但有办法做到这一点吗 字段在C#中默认为私有-您需要向其添加
public
access修饰符:
class BuildableComponent
{
public int cost;
}
但是,按照@EamonnMcEvoy的建议,您可以将其设置为一个属性:
class BuildableComponent
{
public int Cost { get; private set; }
}
建议使用属性,因为您可以使字段从其他类中可读,而不允许其他类修改属性(正如我在上面通过将setter设置为私有所做的那样)。它们还有其他优点,一个是如果需要,可以在派生类中重写它们
在C#6中,还可以完全省略setter,强制只从构造函数设置值,并使属性不可变:
class BuildableComponent
{
public BuildableComponent(int cost)
{
Cost = cost;
}
public int Cost { get; }
}
还有一个问题是BuildingA
和BuildingB
中的BuildableComponent
字段是静态的。这意味着它们属于该类,而不是该类的实例(即,该类的每个实例共享相同的值)。这意味着您需要通过类名而不是类的实例来访问它:
int cost = BuildingA.buildableA.cost;
在这种特殊情况下,我会问你自己是否希望这个组件是静态的。如果要创建多个BuildingA
实例,是否希望它们共享相同的组件?如果不是,则使其非静态。在c#中,类上的成员默认为private
,因此只能从BuildableComponent
的实例中访问cost
您需要将public
access修饰符添加到cost
字段中,或者更好的是,将其设置为带有get和set的属性:
class BuildableComponent{
public int cost;
}
或
向成员添加非私有修饰符“不太管用”这意味着什么?这不应该被否决,是的,这是一个基本问题,显然已经做出了尝试,并提供了所有必要的代码。@EamonnMcEvoy为什么不编辑帖子,而不是提供错误消息,并解释为什么在这种情况下,通过搜索错误消息找到的答案是不够的?
class BuildableComponent{
public int Cost { get; set; };
}