public class CalendarColumn : DataGridViewColumn
{
    public CalendarColumn() : base(new CalendarCell())
        {
        }
}其中
public CalendarColumn() : base(new CalendarCell())
这句怎么解释,为什么用“:”?

解决方案 »

  1.   

    和这个等价吗?   public CalendarColumn()  
            { 
                base(new CalendarCell());
            } 
      

  2.   

    自己构造函数不做任何事情的时候是等价的。
    但是
    public CalendarColumn() : base(new CalendarCell())
    {
        // code...
    }
    会先调用base的构造函数。
    public CalendarColumn()
    {
        // code...
        base(new CalendarCell());
    }
    这样code在base构造函数之前执行。
      

  3.   


    public CalendarColumn() : base(new CalendarCell()) 

        // code... 
    } 和public CalendarColumn()  
       { 
           base(new CalendarCell()); 
           // code... 
       } 有区别吗,MS干吗做这个别扭的语法出来?
      

  4.   


    概念上是等价的。但由于要保证基类的构造函数先执行(初始化要从基础做起),把base(...)作为普通语句难于保证这种顺序:
      public CalendarColumn()  
      { 
            string str = this.CellType.ToString();     // 1
            base(new CalendarCell());                  // 2
      } 把base(...)写在冒号后面,初始化顺序不会被违背,也体现了构造函数的特殊性。
    而之所以使用冒号则是缘于C++的构造写法。