public class CalendarColumn : DataGridViewColumn
{
public CalendarColumn() : base(new CalendarCell())
{
}
}其中
public CalendarColumn() : base(new CalendarCell())
这句怎么解释,为什么用“:”?
{
public CalendarColumn() : base(new CalendarCell())
{
}
}其中
public CalendarColumn() : base(new CalendarCell())
这句怎么解释,为什么用“:”?
{
base(new CalendarCell());
}
但是
public CalendarColumn() : base(new CalendarCell())
{
// code...
}
会先调用base的构造函数。
public CalendarColumn()
{
// code...
base(new CalendarCell());
}
这样code在base构造函数之前执行。
public CalendarColumn() : base(new CalendarCell())
{
// code...
} 和public CalendarColumn()
{
base(new CalendarCell());
// code...
} 有区别吗,MS干吗做这个别扭的语法出来?
概念上是等价的。但由于要保证基类的构造函数先执行(初始化要从基础做起),把base(...)作为普通语句难于保证这种顺序:
public CalendarColumn()
{
string str = this.CellType.ToString(); // 1
base(new CalendarCell()); // 2
} 把base(...)写在冒号后面,初始化顺序不会被违背,也体现了构造函数的特殊性。
而之所以使用冒号则是缘于C++的构造写法。