C#构造函数的 "继承" 问题_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#构造函数的 "继承" 问题

C#构造函数的 "继承" 问题

 2013/10/10 13:19:16  stepbysteplive  博客园  我要评论(0)
  • 摘要:首先说明下之所以用双引号是因为构造函数是没有继承的派生类默认会调用基类的无参数构造函数比如:publicclassA{publicA(){Console.WriteLine("A");}publicA(stringname){Console.WriteLine("AName:{0}",name);}}publicclassB:A{publicB(){Console.WriteLine("B");}publicB(stringname){Console.WriteLine("BName:{0}"
  • 标签:构造函数 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("无惨->带参")        

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

 

发表评论
用户名: 匿名