默认值为一个静态属性
我喜欢c#,但为什么我可以这样做:
public static bool Initialized { private set; get; }
或这个 :
public static bool Initialized = false;
但不是在一条线上的混合?
我只需要设置访问级别我的variables(私人设置),我需要在启动时设置为false。 我不想让这个无聊的私人_Initializedvariables,这将由公共的初始化var的getter返回。 我喜欢我的代码是美丽的。 (注意:我的variables是静态的,不能在构造函数中初始化)。
谢谢
你可以使用静态构造函数
static MyClass() { Initialized = false; }
但是,正如其他人所提到的,bool的默认值是错误的。
自从C#6:
public static bool Initialized { private set; get; } = false;
你可以做:
public static bool Initialized { private set; get; }
由于默认情况下bool
值始终为false,因此不需要对其进行初始化。
如果你需要这个默认情况下是真的,或者有更复杂的逻辑,你需要在一个静态的构造函数中做这个或者使用一个后台字段。
至于“我喜欢我的代码很漂亮” – 个人而言,对于非默认的初始化,我认为这就像“美丽”一样:
private static bool initialized = true; public static bool Initialized { get { return initialized; } }
这使初始化非默认非常可见,这不是一件坏事。
你提到的两个代码块是两个不同的东西。
第一个块是一个自动实现的属性定义 。 这是完全属性定义的语法糖,看起来像这样:
private static bool _initialized; public static bool Initialized { private set { _initialized = value; } get { return _initialized; } }
你的第二块代码是一个静态成员定义 。 如果你看看上面给出的扩展,你会注意到它包含一个私有的静态成员定义。 如果你想提供一个初始值,你可以在这里:
private static bool _initialized = false; public static bool Initialized { private set { _initialized = value; } get { return _initialized; } }
您正在使用的内联属性定义只是为了使代码在最常见的情况下更短一些。 如果你想做其他事情,你可以使用完整的财产代码forms。
另外,你可以下完全不同的路线,并使用静态构造函数。 (见Corey的答案 )