导航

(转)父类与子类的构造函数

Posted on 2013-05-07 11:32  杨彬Allen  阅读(283)  评论(0)    收藏  举报

1.任何类有自建构造函数  ThisClass(string parm1, string parm2),
  系统不会再自动生成 ThisClass( ) 默认构造函数

所有手写一个构造函数后,无需再写一个Private ThisClass()了。


2.子类的任意构造函数SonClass(string parm1, string parm2), 都会先调用执行父类的默认构造函数ParentClass()
即默认调用:base(),注意:默认构造函数是无参数的。

所以父类必须至少构建一个空的默认构造函数 ParentClass() , 用以为子类继承
除非指定  :base(null,null) , 将调用 ParentClass(string parm1, string parm2)

 

父类若没有默认构造,子类必须在其构造函数内显式调用父类的带参构造才能保证子类对象的顺利实例化!

/*--===------------------------------------------===---  
作者:许明会  
日期:类的派生和构造函数间的关系,调用层次及实现  
日期:2008年1月18日 17:30:43  
若希望类能够有派生类,必须为其实现默认构造函数.  
若类没有实现带参构造,编译器将自动创建默认构造函数.  
若类实现了带参构造,则编译器不会自动生成默认构造.  
--===------------------------------------------===---*/


namespace xumh
{
    public class MyClass
    {
        public MyClass()
        {
            Console.WriteLine("MyClass:默认构造函数");
        }
        public MyClass(int a, int b)
        {
            Console.WriteLine("MyClass带参构造:a={0}, b={1}.", a, b);
        }
    }

    public class MyClass2 : MyClass
    {
        public MyClass2()
        {
            Console.WriteLine("MyClass2:默认构造函数");
        }
        public MyClass2(int a, int b)
        {
            Console.WriteLine("MyClass2带参构造:a={0}, b={1}.", a, b);
        }
    }

    public class MyClass3 : MyClass2
    {

        public MyClass3()
        {
            Console.WriteLine("MyClass3:默认构造函数");
        }
        public MyClass3(int a, int b)
        {
            Console.WriteLine("MyClass3带参构造:a={0}, b={1}.", a, b);
        }
    }

    public class runMyApp
    {
        static void Main()
        {
            MyClass3 my = new MyClass3(3, 4);
        }
    }
}
/*--===------------------------------------------===--- 
输出如下: 
MyClass:默认构造函数 
MyClass2:默认构造函数 
MyClass3带参构造:a=3, b=4. 
--===------------------------------------------===---*/