Default Parameter这个新特性的用处是为了帮助编程者减少构造函数的数量:
4.0版本以前,如果需要给一个class重载多个构造函数需要声明多个函数体 。例如要给一个类添加三个构造函数:
public class MyClass
{
// collection of data
private List<ImportantData> coll;
// Name of the instance:
private string name;
public MyClass() :
this(0, "")
{
}
public MyClass(int initialCount) :
this(initialCount, string.Empty)
{
}
public MyClass(int initialCount, string name)
{
coll = (initialCount > 0) ?
new List<ImportantData>(initialCount) :
new List<ImportantData>();
this.name = name;
}
}
需要声明三个构造函数
4.0以后:
public class MyClass
{
// collection of data
private List<ImportantData> coll;
// Name of the instance:
private string name;
public MyClass() :
this(0, "")
{
}
public MyClass(int initialCount, string name)
{
coll = (initialCount > 0) ?
new List<ImportantData>(initialCount) :
new List<ImportantData>();
this.name = name;
}
}
可以看见,只要声明两个构造函数,但是用户仍然可以传入一个参数实现调用
static void Main(string[] args)
{
MyClass mc = new MyClass("jake", 0);
Console.WriteLine(mc.ToString());
Console.WriteLine(mc.Collt.Capacity.ToString());
mc = new MyClass(1);
//但是不可以用mc = new MyClass("jake");
Console.WriteLine(mc.ToString());
Console.WriteLine(mc.Collt.Capacity.ToString());
Console.ReadKey();
mc=new MyClass();
Console.WriteLine(mc.ToString());
Console.WriteLine(mc.Collt.Capacity.ToString());
Console.ReadKey();
}
default para只能放在最后一个或多个,即是不可以出现这样
public MyClass(int initialCount=0, string name)
{
coll = (initialCount > 0) ?
new List<ImportantData>(initialCount) :
new List<ImportantData>();
this.name = name;
}