我喜欢c#,但我为什么要这样做:
public static bool Initialized { private set; get; }
或者这个:
public static bool Initialized = false;
但不能将两者混合在一起?
我只需要为我的变量(私有集)设置访问级别,我需要在启动时将其设置为false。我不想制作那个无聊的私有_Initialized变量,它将由公共Initialized var的getter返回。我喜欢我的代码很漂亮。 (注意:我的变量是静态的,不能在构造函数中初始化。)
谢谢
答案 0 :(得分:53)
答案 1 :(得分:16)
自C#6以来:
public static bool Initialized { private set; get; } = false;
答案 2 :(得分:6)
你可以这样做:
public static bool Initialized { private set; get; }
由于默认情况下bool
值始终为false,因此无需初始化它。
如果您在默认情况下需要这样做,或者要有更复杂的逻辑,则需要在静态构造函数中执行此操作或使用支持字段。
至于“我喜欢我的代码是美丽的” - 就个人而言,对于非默认初始化,我认为这就像“美丽”:
private static bool initialized = true;
public static bool Initialized { get { return initialized; } }
这使得非默认的初始化非常明显,这不是一件坏事。
答案 3 :(得分:3)
您提到的两个代码块是两个不同的东西。
第一个块是auto implemented property defination。这是完全属性定义的语法糖,如下所示:
private static bool _initialized;
public static bool Initialized
{
private set
{
_initialized = value;
}
get
{
return _initialized;
}
}
您的第二段代码是static member definition。如果你看一下我上面给出的扩展,你会发现它包含一个私有的静态成员定义。如果您想提供初始值,可以在此处执行:
private static bool _initialized = false;
public static bool Initialized
{
private set
{
_initialized = value;
}
get
{
return _initialized;
}
}
您正在使用的内联属性定义旨在使代码在最常见的情况下缩短一些。如果您想要做任何其他事情,可以使用完整形式的属性代码。
或者,您可以使用完全不同的路径并使用静态构造函数。 (见Corey's answer)