静态属性的默认值

时间:2010-04-07 22:23:00

标签: c# static properties default

我喜欢c#,但我为什么要这样做:

public static bool Initialized { private set; get; }

或者这个:

public static bool Initialized = false;

但不能将两者混合在一起?

我只需要为我的变量(私有集)设置访问级别,我需要在启动时将其设置为false。我不想制作那个无聊的私有_Initialized变量,它将由公共Initialized var的getter返回。我喜欢我的代码很漂亮。 (注意:我的变量是静态的,不能在构造函数中初始化。)

谢谢

4 个答案:

答案 0 :(得分:53)

您可以使用static constructor

static MyClass()
{
    Initialized = false;
}

但是,正如其他人所提到的那样,bool的默认值将为false。

答案 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