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在同一继承层次的同一个类中,构造函数可以重载

  • 相关阅读:
    java做微信支付notify_url异步通知服务端的写法
    QT如何编译出带调试信息的qtwebkit库
    Vmware 占用宿主机硬盘空间只增不减
    vmware linux无法正常上网
    Linux中find常见用法示例
    计算机网络OSI参考模型与tcp/ip四层模型
    Core开发-后台任务利器Hangfire使用
    Azure构建PredictionIO和Spark的推荐引擎服务
    NET MVC+EF6+Bootstrap
    服务器
  • 原文地址:https://www.cnblogs.com/zyip/p/2663139.html
Copyright © 2011-2022 走看看