所以这就是我的想法......
public class MyClass
{
public const string MyConstant = "MyConstantValue";
private static MyClass DefaultInstance;
static MyClass()
{
DefaultInstance = new MyClass();
}
}
...
NotificationService.RegisterForNotification(MyClass.MyConstant, Callback);
这行得通吗,还是我需要使用类似 static readonly
property 字段的东西来触发静态构造函数?
最佳答案
使用常量不一定会导致成员访问,这会导致调用静态构造函数。允许编译器(鼓励,甚至)在编译时替换常量的值。
您建议的 static readonly
解决方法应该没问题,尽管 readonly
建议的是一个字段,而不是一个属性。属性在没有 setter 时是只读的,不涉及 readonly
关键字。
一个简单的例子:
class HasSConstructor
{
internal const int Answer = 42;
static HasSConstructor()
{
System.Console.WriteLine("static constructor running");
}
}
public class Program
{
public static void Main()
{
System.Console.WriteLine("The answer is " + HasSConstructor.Answer.ToString());
}
}
.NET 4.0 下的输出:
The answer is 42
静态构造函数永远不会运行!
关于c# - .Net : Do static constructors get called when a constant is access?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6316738/