熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#構造函數的 繼承 問題

2022-06-13   來源: .NET編程 

  首先說明下之所以用雙引號是因為構造函數是沒有繼承的派生類默認會調用基類的無參數構造函數

  比如:

  public class A {

  public A() {

  ConsoleWriteLine(A);

  }

  public A(string name) {

  ConsoleWriteLine(A Name:{} name);

  }

  }

  public class B : A {

  public B() {

  ConsoleWriteLine(B);

  }

  public B(string name) {

  ConsoleWriteLine(B Name:{} name);

  }

  }

  class Program

  {

  static void Main(string[] args)

  {

  B b = new B();

  B b = new B(張三);

  ConsoleReadKey();

  }

  }

  輸出的結果為

  說明不管調用派生類的哪個構造函數默認都先調用基類的無參數構造函數

  之所以標題中用 繼承 是因為構造函數之間的調用也是用 :下面就在派生類裡面調用一下基類的構造函數

  class Program {

  static void Main(string[] args)

  {

  B b = new B();

  ConsoleReadKey();

  }

  }

  public class B : A {

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

  ConsoleWriteLine(B);

  }

  public B(string name) {

  ConsoleWriteLine(B Name:{} name);

  }

  }

  輸出結構為

  由結果可以看出當給B的構造函數手動指派要調用的基類帶參數的構造函數後將不再執行基類的無參數構造函數

  下面寫下在同一個類中構造函數的調用

  class Program {

  static void Main(string[] args)

  {

  B b = new B();

  ConsoleReadKey();

  }

  }

  public class B : A {

  public B():this(無慘>帶參) {

  ConsoleWriteLine(B);

  }

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

  ConsoleWriteLine(B Name:{} name);

  }

  public B(bool b) {

  ConsoleWriteLine(B bool:{} b); }

  }

  輸出結果

  為了看一下調用的先後關系就又加了一個bool參數的構造函數由結果可以看出如果構造函數調用了另一個構造函數例如

  public B():this(無慘>帶參)

  執行順序是從後向前依次執行的


From:http://tw.wingwit.com/Article/program/net/201311/11827.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.