奇怪的构造函数!!!

正常情况下,下面的代码:
namespace ClassLibrary1 {
    
public class Class1 {
        
private bool _bFlag;

        
public Class1() {
            _bFlag 
= true;
        }
    }
}
产生的IL代码应该是:
.method public hidebysig specialname rtspecialname
        instance void  .ctor() cil managed
{
  // 代码大小       14 (0xe)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0006:  ldarg.0
  IL_0007:  ldc.i4.1
  IL_0008:  stfld      bool ClassLibrary1.Class1::_bFlag
  IL_000d:  ret
} // end of method Class1::.ctor


可是,我见到这样一段代码:
.method public hidebysig specialname rtspecialname
        instance void  .ctor() cil managed
{
  // 代码大小       14 (0xe)
  .maxstack  2
  IL_0000:  ldarg.0
  IL_0001:  ldc.i4.1
  IL_0002:  stfld      bool ClassLibrary1.Class1::_bFlag
  IL_0007:  ldarg.0
  IL_0008:  call       instance void [mscorlib]System.Object::.ctor()
  IL_000d:  ret
} // end of method Class1::.ctor

什么样的C#代码可以生产这样的IL呢?
先给变量赋值,然后才调用基类的构造函数。

找到原因了!
谢谢布鲁斯南提示。
C#代码是这样的:
namespace ClassLibrary1 {
    
public class Class1 {
        
private bool _bFlag = true;
    }
}
这时系统就会先给变量赋值,再去调用基类的构造函数。

posted on 2006-10-25 13:28  Voidclass  阅读(1631)  评论(3编辑  收藏  举报

导航