可以在方法中初始化静态变量吗?以下代码是否有效?谢谢!
internal static class Common
{
internal static int TimeOut;
internal static string Name;
internal static void Initialize()
{
TimeOut = Config.Read("timeout");
Name = Config.Read("Name");
}
}
答案 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; }