我的代码如下
class MyStaticClass
{
static MyStaticClass{};
public static readonly MyStaticClass Instance = CreateMe();
public static int GetSomeValue = GetValue();
private static int GetValue()
{
return 0;
}
private static MyStaticClass CreateMe()
{
Console.WriteLine("This method was called");
return new MyStaticClass();
}
}
公共课程 {
public static void Main()
{
int val=MyStaticClass.GetSomeValue;
}
}
O / P:
This method was called
当我调用val
时,为什么调试器会访问CreateMe
方法?是否我访问它的任何静态方法都将访问类中的所有静态方法?
答案 0 :(得分:4)
调用方法CreateMe()
是因为在以下语句中创建对象Instance
时正在调用它。
public static readonly MyStaticClass Instance = CreateMe();
这是您班级中的静态对象,在您访问MyStaticClass.GetSomeValue
所做的课程时创建。
Dubugging the code将清楚地显示执行语句的顺序。您可以在MSDN上查看有关调试Debugger Roadmap
的详细文章答案 1 :(得分:1)
您有一个静态初始化程序用于静态字段。作为程序启动的一部分,将评估所有静态字段。
编辑:此处有一点澄清:
特定类中的静态字段按声明顺序进行评估,但没有特定顺序,哪个类首先初始化它的静态字段。 现在,如果你有一个静态属性,那就不一样了。
答案 2 :(得分:0)
两个字段都已使用静态方法初始化。因此,在这种情况下,将评估所有静态方法。