é™æ€æˆå‘˜çš„åˆå§‹åŒ–

时间:2011-05-10 11:15:26

标签: c#

class Test
{
   private static int m = 10;
   private static double n = 20;

   public Test()
   {

   }
}

如果使用é™æ€æž„造函数,则在构造类的第一个实例或引用第一个å˜é‡æ—¶åˆå§‹åŒ–é™æ€å˜é‡ã€‚如果我ä¸ä½¿ç”¨é™æ€æž„造函数,则何时åˆå§‹åŒ–é™æ€å˜é‡ä»¥åŠæŒ‰ä»€ä¹ˆé¡ºåºã€‚

3 个答案:

答案 0 :(得分:2)

C#语言规范section 10.4.5.1说:

  

如果类中存在é™æ€æž„造函数,则执行é™æ€å­—段åˆå§‹å€¼è®¾å®šé¡¹   在执行之å‰ç«‹å³å‘生   那个é™æ€æž„造函数。除此以外,   é™æ€å­—段åˆå§‹å€¼è®¾å®šé¡¹æ˜¯   执行于   ä¾èµ–于实现的时间   第一次使用é™æ€åœº   那个ç­ã€‚

因此,它ä¾èµ–于实现,但所有é™æ€å­—段都ä¿è¯åœ¨ä½¿ç”¨å…¶ä¸­ä¸€ä¸ªä¹‹å‰è¿›è¡Œåˆå§‹åŒ–。

答案 1 :(得分:1)

在C#4.0中,é™æ€å­—段在没有é™æ€æž„造函数的情况下被åˆå§‹åŒ–为尽å¯èƒ½å»¶è¿Ÿã€‚在以å‰çš„版本中,我们无法给出准确的åˆå§‹åŒ–时间。 Jon Skeet对此有a great post。

答案 2 :(得分:-1)

åŒä¸€ä¸ªåœ°æ–¹ã€‚ 编译器为您å出é™æ€æž„造函数。订å•æ˜¯ä¸€ä¸ªæˆå‘˜å®šä¹‰çš„。


如果你使用 Reflector 查看类,你å¯ä»¥çœ‹åˆ°é™æ€æž„造函数:

public class MyStaticClass
{
    public static int MyInt = 10;
}

å˜ä¸ºï¼š

public class MyStaticClass
{
    // Fields
    public static int MyInt;

    // Methods
    static MyStaticClass();
    public MyStaticClass();
}

用

static MyStaticClass()
{
    MyInt = 10;
}
相关问题