gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:02:46 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com