WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院软件开发C语言 关于C#静态函数什么时候被调用的问题 阅读

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

 2010-09-30 21:00:31 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愬搫绾ч柕濠忕細閼割亜顪冪€n剙浠ф繛鍫熷灥椤曘儵顢欓悡搴ば�
核心提示:在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:关于 静态 函数

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