构造函数1
class One
{
private Int32 nMem;
private String strMem;
public One()
{
nMem = 5;
strMem = "Member";
}
public One(Int32 nValue, String strValue)
{
nMem = nValue;
strMem = strValue;
}
}
构造函数2
class Two
{
private Int32 nMem = 5;
private String strMem = "Member";
public Two()
{
nMem = 5;
strMem = "Member";
}
public Two(Int32 nValue, String strValue)
{
nMem = nValue;
strMem = strValue;
}
}
构造函数3
class Three
{
private Int32 nMem = 5;
private String strMem = "Member";
public Three() { }
public Three(Int32 nValue, String strValue) { }
}
其中能看出来三个类的这几个构造函数有明显的不同--在代码优化方面--正是这些不同,导致了代码在编译的过程中生成的文件(exe、dll等)有很大的区别,这其中One、Three编译出来的结果我们使用微软提供的ILDASM工具看是相同的,而类Two的编译代码确大不相同,多了好些IL代码
原因是Two在调用构造函数之前每调用一次都将包括初始化两个成员变量的过程,然后才调用真正的构造函数再初始化一遍成员变量,既相当于变量初始化了两次,所以如果我们有一些需要初始化的实力字段或者许多重载测构造函数,那么我们应该考虑在定义成员变量的时候避免同时对他们进行初始化或者不再在构造器中在此初始化成员变量。