zoukankan      html  css  js  c++  java
  • C#类的继承,构造函数实现及其调用顺序

    类层层派生,在实例化的时候构造函数的调用顺序是怎样的? --从顶层基类开始向子类方向顺序调用无参构造.
    默认构造(无参构造)和带参构造什么时候调用?--默认将从顶层父类的默认构造一直调用到当前类的默认构造.

    下面是示例:

        /*--===------------------------------------------===---
    作者:许明会
    日期:类的派生和构造函数间的关系,调用层次及实现
    日期: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(34);
                    Console.ReadKey();
                }
            }
        }
        
    /*--===------------------------------------------===---
    输出如下:
    MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现
    MyClass2:默认构造函数,必须显式实现基类的无参构造函数!
    MyClass3:默认构造函数,因该类有带参构造,所以必须显式实现所有积累的默认构造

    MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现
    MyClass2:默认构造函数,必须显式实现基类的无参构造函数!
    MyClass3带参构造:a=3, b=4.
         * --===------------------------------------------===---
    */
  • 相关阅读:
    内存映射文件原理探索(转载)
    虚拟内存原理
    CSAPP-链接
    CSAPP-程序优化
    CSAPP-过程调用,数据存储,缓冲区溢出
    【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)
    【贪心+一点小思路】Zoj
    【几何模板加点小思路】hdu-4998 Rotate
    【背包问题】【出来混总是要还的...】总结+入门练手题
    【优先队列】【最近连STL都写不出来了/(ㄒoㄒ)/~~】hdu_5360/多校#6_1008
  • 原文地址:https://www.cnblogs.com/flaaash/p/1044747.html
Copyright © 2011-2022 走看看