可以在静态方法中初始化静态变量吗?

时间:2012-05-18 18:55:21

标签: c#

可以在方法中初始化静态变量吗?以下代码是否有效?谢谢!

internal static class Common
{

    internal static int TimeOut;
    internal static string Name;


    internal static void Initialize()
    {
        TimeOut = Config.Read("timeout");
        Name = Config.Read("Name");
    }
}

2 个答案:

答案 0 :(得分:6)

简短的回答是肯定的。

如果你真的想要初始化静态变量(如在使用静态类之前在运行时设置它们的值),请使用静态构造函数:

internal static class Common
{
    internal static int TimeOut;
    internal static string Name;

    static Common()
    {
        TimeOut = Config.Read("timeout");
        Name = Config.Read("Name");
    }
}

注意,静态构造函数没有访问修饰符,必须是无参数的。

有关static constructors的进一步阅读,请参阅此MSDN article

答案 1 :(得分:4)

是的,他们可以。您的代码完全有效。

话虽如此,初始化然后在静态构造函数或内联中​​更好,因为它可以防止在初始化之前使用和访问它们。

在您的情况下,这需要使用静态构造函数,因为您正在运行代码(Config.Read):

static Common()
{
    TimeOut = Config.Read("timeout");
    Name = Config.Read("Name");
}

我还建议使用Properties而不是Fields作为静态值,因为这确实提供了一些好处,特别是在面向未来的API方面。这可以很简单:

internal static int TimeOut { get; set; }
internal static string Name { get; set; }

在您的情况下,由于这些似乎在初始化时被读取一次,您可能还会使用:

internal static int TimeOut { get; private set; }
internal static string Name { get; private set; }