WEB开发网
开发学院软件开发C语言 关于C#静态函数什么时候被调用的问题 阅读

关于C#静态函数什么时候被调用的问题

 2010-09-30 21:00:31 来源:WEB开发网   
核心提示:在MSDN上论坛看到下面一个代码:demo.cs1.usingSystem;2.3.publicclassA4.{5.publicstaticstringstrText;6.7.staticA()8.{9.strText="aaaaaa";10.}11.}12.13.publicclassB:A14

在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的静态构造函数执行。

1 2 3 4  下一页

Tags:关于 静态 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接