C#静态成员概念的困惑
我知道类的静态成员是该类的所有实例之间的共享成员,但创建实例时如何使用它? 例如,我有一个名为C#静态成员概念的困惑,c#,C#,我知道类的静态成员是该类的所有实例之间的共享成员,但创建实例时如何使用它? 例如,我有一个名为Map()的类,我希望将MaxZoom的所有Map()实例的级别保持在与18相同的级别。在下面的代码中,我使用对象初始值设定项填充实例,并设置每个实例的标题,但是MaxZoom怎么样?我可以在哪里以及如何指定它 void Main() { var map = new Map(){ Title= "Green Coverage"}; Console.WriteLine(map.Titl
Map()
的类,我希望将MaxZoom
的所有Map()
实例的级别保持在与18相同的级别。在下面的代码中,我使用对象初始值设定项填充实例,并设置每个实例的标题,但是MaxZoom
怎么样?我可以在哪里以及如何指定它
void Main()
{
var map = new Map(){ Title= "Green Coverage"};
Console.WriteLine(map.Title);
}
public class Map
{
private static int MaxZoom = 18;
public string Title {get; set;}
}
您不能将其用作实例的一部分。您可以使用类定义来引用它 例如,要更改MaxZoom,可以使用
void Main()
{
Map.MaxZoom = 30; // now all maps can only zoom to 30
var map = new Map(){ Title= "Green Coverage"};
Console.WriteLine(map.Title);
}
正如Igor在下面指出的那样,要使其发挥作用,您需要将MaxZoom从private
更改为public
如果您愿意,可以放入一个实例成员,其属性与调用静态成员的属性相同。这对于可能特定于实例的常见计算非常有用。在Map类中定义MaxZoom时,您已经指定了它的值。您只能在Map类中使用它,因为它是私有的 如果您无意在运行时更改
MaxZoom
的值,我会使用const
使用对象初始值设定项[我正在]设置每个实例的标题
,但是MaxZoom
如何
不能在对象初始值设定项中设置MaxZoom
,因为它在类的所有实例之间共享。因此,它不属于任何特定实例
您已经在静态初始值设定项中将MaxZoom
设置为18
。如果要更改它,请使用Map.MaxZoom=…
expression。由于该字段是私有的,因此必须将其设置在Map
方法之一的内部
注意:如果您根本不打算更改
MaxZoom
,请将其设置为readonly
或const
。如果您确实计划更改它,则使用属性提供了更好的选择。如果您希望从类外访问静态变量,则需要将私有
访问修饰符设置为内部或公共
public class Map
{
public static int MaxZoom = 18;
public string Title {get; set;}
}
静态成员仅初始化一次,与使用该类类型创建的对象数无关
您也可以从静态构造函数初始化静态变量:
public class Map
{
public static int MaxZoom;
public string Title { get; set; }
static Map()
{
MaxZoom = 18;
}
}
您初始化了它一次,并且已经在代码中这样做了
MaxZoom=18
。就这样,你完了,别无选择。你可以在课堂上随时阅读。请记住,您将MaxZoom
定义为private
,不能在类之外访问它。您已经指定了它。它是静态的
,所以只有一个,它是在类定义的第行中定义和指定的。您是否试图以某种方式使用它,但遇到了问题?可以使用类名++访问静态变量方法名。在您的情况下,您可以像这样访问它:Map.MaxZoom=value代码>您已经在类中设置了静态成员的值。因为它是私人的,所以你不能在课外聊天。如果将其公开,可以通过Map.MaxZoom=20
进行设置。但在更改它时需要小心,因为它可能会影响类的所有实例的行为。这有帮助吗?OPOoh中MaxZoom
的访问修饰符是什么!很好的观点,伊戈尔!!!谢谢你的评论,但这正是我迷路的地方。我没有在任何构造函数中使用MaxZoom
,所以我的地图将如何使用它@足够:要在Map类外部使用MaxZoom
,请将其设置为internal
或public
。这样您就可以使用Map.MaxZoom