C#类的继承,构造函数实现及其调用顺序

来源:互联网 发布:图片橡皮擦软件 编辑:程序博客网 时间:2024/05/16 15:29

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

    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}.尽管MyClass3有带参构造,但只有显式调用带参构造,否则总是呼叫默认构造", 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 my3 = new MyClass3();
                Console.WriteLine();
                MyClass3 my = new MyClass3(3, 4);
                Console.ReadKey();
            }
        }
    }
    /*--===------------------------------------------===---
输出如下:
MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现
MyClass2:默认构造函数,必须显式实现基类的无参构造函数!
MyClass3:默认构造函数,因该类有带参构造,所以必须显式实现所有积累的默认构造

MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现
MyClass2:默认构造函数,必须显式实现基类的无参构造函数!
MyClass3带参构造:a=3, b=4.
     * --===------------------------------------------===---*/