关于C#静态函数什么时候被调用的问题
2010-09-30 21:00:31 来源:WEB开发网在MSDN上论坛看到下面一个代码:
demo.cs
1. using System;
2.
3. public class A
4. {
5. public static string strText;
6.
7. static A()
8. {
9. strText = "aaaaaa";
10. }
11. }
12.
13. public class B : A
14. {
15. static B()
16. {
17. strText = "ssss";
18. }
19. }
20.
21. public class Demo
22. {
23. public static void Main(string[] args)
24. {
25. B b = new B();
26. A a = new A();
27.
28. Console.WriteLine(B.strText);
29. }
30. }
编译并执行以后,你会发现B的静态构造函数先被调用,然后是A的静态构造函数被调用。但是问题是,Console.WriteLine那一行竟然打印的是在B的静态构造函数里面设置的值:“ssss”。
我第一次看到这个问题的时候,也是非常惊讶,经过仔细重现以后,我判定是A的静态构造函数自动被B的静态构造函数所调用,即static B()的实际代码看起来应该类似下面这样:
static B()
{
A();
strText = "ssss";
}
嗯,看起来也没有什么特别嘛,跟类的构造函数是一样的,类的构造函数都会先调用基类的构造函数,然后再执行自己构造函数包含的代码。但是如果你把25行和26行对换的话,你会发现A的静态构造函数又会先于B的静态构造函数执行。
更多精彩
赞助商链接