c# - .Net : Do static constructors get called when a constant is access?

标签 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);

这行得通吗,还是我需要使用类似 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/

相关文章:

c# - 两个字符整数到字符?

C# 算法博弈论 API

c++ - 模板中的静态成员变量,具有多个 dll

c++ - 你怎么知道 main 是否已经退出?

c# - 这两个构造函数做同样的事情吗?

c# - 如何使用 NPOI c# 将 xls 文件保存为 xlsx 文件?

c# - 创建动态表达式树

c++ - 在C++中的成员函数内声明的统计信息的可见性如何?

c# - 为什么我可以更改私有(private)静态只读字段但不能更改公共(public)字段?

c# - 静态构造函数有什么用?