.Net:当一个常量访问时,是否会调用静态构造函数?

Mas*_*ity 5 c# static static-constructor

所以这就是我在想的......

public class MyClass
{
    public const string MyConstant = "MyConstantValue";

    private static MyClass DefaultInstance;

    static MyClass()
    {
         DefaultInstance = new MyClass();
    }
}

...

NotificationService.RegisterForNotification(MyClass.MyConstant, Callback);
Run Code Online (Sandbox Code Playgroud)

这项工作还是我需要使用类似的东西 static readonly 属性 字段触发静态构造函数?

Ben*_*igt 4

使用常量不一定会导致成员访问,这会导致调用静态构造函数。编译器被允许(甚至鼓励)在编译时替换常量的值。

您建议的解决方法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());
    }
}
Run Code Online (Sandbox Code Playgroud)

.NET 4.0下的输出:

答案是42

静态构造函数永远不会运行!