zoukankan      html  css  js  c++  java
  • the constructor in C# (面试题构造函数是否可以继承和重载的解释)

    1.观察两个类

      class A
        {
            protected int i = 0;
            public A()
            {
                i = 1;
            }

            public void P()
            {
                System.Console.WriteLine("P:"+i.ToString());
            }

            public virtual void VP()
            {
                System.Console.WriteLine("VP in A:" + i.ToString());
            }
        }

        class B:A
        {
            public B()
            {
                i = 2;
            }

            public B(int i)// public B(int i) = public B(int i):base()
            {
                //this.i = i;
                
    //keep this section as empty, while the base constructor will be invoked
            }

            public override void VP()
            {            
                System.Console.WriteLine("VP in B:" + i.ToString());
                //base.VP();
            }

        } 

    2.

                A b = new A();
                b.P();
                b.VP();
                Console.Read();
                //调用默认构造函数
                
    //调用虚方法
                
    //一切都很简单而且美好


                A b1 = new B();
                b1.P();
                b1.VP();
                //调用派生类的构造函数 , 
                
    //派生类的构造函数调用基类的默认构造函数

                A b2 = new B(0);
                b1.P();
                b1.VP();
                //调用派生类中带参数的构造函数时 public B(int i) = public B(int i):base()
                
    //先调用派生类的构造函数
                
    //派生类的构造函数调用基类的默认构造函数

    //            有调用堆栈为证
    //>    ConsoleApplication2.exe!ConsoleApplication2.A.A() 行 11    C#
    //    ConsoleApplication2.exe!ConsoleApplication2.B.B() 行 30 + 0x8 字节    C#
    //    ConsoleApplication2.exe!ConsoleApplication2.Program.Main(string[] args = {string[0]}) 行 64 + 0x15 字节    C#


                

    结论: 

    1构造函数无法用virtual和override修饰,会造成编译错误
    2父构造函数可以被修改,但不是重写,也不是重载,而是在调用时注入了新函数的代码 

    3在同一继承层次的同一个类中,构造函数可以重载

  • 相关阅读:
    npm ci命令比npm installer命令快2至10倍
    Liferay 7.1发布啦
    2016/07/05 zend optimizer
    2016/06/16 phpexcel
    2016/06/13 phpexcel 未完待续
    2016/06/10 日历插件 Datepicker
    2016/06/09 ThinkPHP3.2.3使用分页
    2016/06/02 网摘记录 svn 服务器端 客户端 安装使用
    2016/05/27 php上传文件常见问题总结
    2016/05/25 抽象类与API(接口)差别
  • 原文地址:https://www.cnblogs.com/zyip/p/2663139.html
Copyright © 2011-2022 走看看