zoukankan      html  css  js  c++  java
  • C#构造函数的 "继承" 问题

    首先说明下 之所以用 双引号 是因为构造函数是没有继承的

    派生类默认会调用基类的无参数构造函数

    比如: 

      public class A         {

            public A()         {

                Console.WriteLine("A");

            }

            public A(string name)         {

                Console.WriteLine("A Name:{0}", name);

            }

        }

        public class B : A     {

            public B()         {

                Console.WriteLine("B");

            }

            public B(string name)         {

                Console.WriteLine("B Name:{0}", name);

            }

        }

    class Program

    {

      static void Main(string[] args)

      {

        B b = new B();
                B b1 = new B("张三");
                Console.ReadKey();

      }

    }

    输出的结果为:

    说明不管调用派生类的哪个构造函数,默认都先调用基类的无参数构造函数

    之所以标题中用 "继承" 是因为构造函数之间的调用也是用 ":",下面就在派生类里面调用一下基类的构造函数

    class Program     {        

       static void Main(string[] args)        

       {            

        B b = new B();            

         Console.ReadKey();        

      }

        }

    public class B : A     {

            public B():base("B->A")         {

                Console.WriteLine("B");

            }

            public B(string name)         {

                Console.WriteLine("B Name:{0}", name);

            }

        }

    输出结构为:

    由结果可以看出,当给B的构造函数手动指派要调用的基类带参数的构造函数后,将不再执行基类的无参数构造函数

    下面写下在同一个类中构造函数的调用

    class Program     {       

       static void Main(string[] args)       

       {            

        B b = new B();           

         Console.ReadKey();        

      }

        }

    public class B : A     {

            public B():this("无惨->带参")         {

                Console.WriteLine("B");

            }

            public B(string name):this(true)         {

                Console.WriteLine("B Name:{0}", name);

            }        

      public B(bool b)         {            

         Console.WriteLine("B bool:{0}", b);         }    

      }

    输出结果:

    为了看一下调用的先后关系就又加了一个bool参数的构造函数,由结果可以看出如果构造函数调用了另一个构造函数,例如:

    public B():this("无惨->带参")        

    执行顺序是从后向前依次执行的

    没有困难创造困难也要上!
  • 相关阅读:
    不重复随机数生成
    centos 输入密码正确进不去系统
    程序退出异常_DebugHeapDelete和std::numpunct
    iptables导致数据包过多时连接失败
    linux服务器并发与tcmalloc
    Windows server 2008 被ntlmssp安装攻击 解决
    转载 html div三列布局占满全屏(左右两列定宽或者百分比、中间自动适应,div在父div中居底)
    WIN2003使用IP安全策略只允许指定IP远程桌面连接
    如何让电脑公司Win7系统自动关闭停止响应的程序
    win7 64的系统安装。net4.0总是提示安装未成功
  • 原文地址:https://www.cnblogs.com/tiaf/p/3360932.html
Copyright © 2011-2022 走看看