一个类型允许定义多个实例构造器,在使用过程中确实是十分方便的。但是,在定义这些构造器时,如果稍不留神,可能就使你的代码编译后产生了好多不必要的垃圾,增加了程序集的大小,也不够简洁。
例如:
using System;
namespace testConstruct
{
/// <summary>
/// Class2 的摘要说明。
/// </summary>
public class Class2
{
Int32 x = 6;
String s = "Hello";
Double d = 3.24;
Byte b;
public Class2()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Class2(Int32 x)
{
}
public Class2(String s)
{
}
}
}
namespace testConstruct
{
/// <summary>
/// Class2 的摘要说明。
/// </summary>
public class Class2
{
Int32 x = 6;
String s = "Hello";
Double d = 3.24;
Byte b;
public Class2()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Class2(Int32 x)
{
}
public Class2(String s)
{
}
}
}
用ILDASM来看生成的IL结果:
可以看到,三个构造类都重复初始化了几个变量,造成编译后程序集大小的增加。
就三个构造函数已经占了40+40+40=120 Bytes.
如果稍微修改一下,如下面所示:
using System;
namespace testConstruct
{
/// <summary>
/// Class3 的摘要说明。
/// </summary>
public class Class3
{
Int32 x = 6;
String s = "Hello";
Double d = 3.24;
Byte b;
public Class3()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Class3(Int32 x) : this()
{
}
public Class3(String s) : this()
{
}
}
}
namespace testConstruct
{
/// <summary>
/// Class3 的摘要说明。
/// </summary>
public class Class3
{
Int32 x = 6;
String s = "Hello";
Double d = 3.24;
Byte b;
public Class3()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Class3(Int32 x) : this()
{
}
public Class3(String s) : this()
{
}
}
}
再用ILDASM来看产生的IL结果:
可见生成的程序集大小确实减少了不少。现在三个构造函数才占了40+7+7=54 Bytes.
就三个构造函数的代码而言,大小缩减了一半不止。