奇怪的构造函数!!!
正常情况下,下面的代码:
可是,我见到这样一段代码:
什么样的C#代码可以生产这样的IL呢?
先给变量赋值,然后才调用基类的构造函数。
找到原因了!
谢谢布鲁斯南提示。
C#代码是这样的:
namespace ClassLibrary1 {
public class Class1 {
private bool _bFlag;
public Class1() {
_bFlag = true;
}
}
}
产生的IL代码应该是:public class Class1 {
private bool _bFlag;
public Class1() {
_bFlag = true;
}
}
}
.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
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
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;
}
}
这时系统就会先给变量赋值,再去调用基类的构造函数。
public class Class1 {
private bool _bFlag = true;
}
}
posted on 2006-10-25 13:28 Voidclass 阅读(1631) 评论(3) 编辑 收藏 举报