[C#, CSharp, C Sharp 教學 教程 教材 Tutorial] this & Base
YehYeh\'s Notepad yehyeh@gmail.com 

[C#, CSharp] this和base

this

  • 子類別繼承父類別後,當存取同名的成員時,可以使用base和this來區分是存取父類別或子類別的成員
  • this代表目前類別,可以用來識別類別成員或區域變數
  • 使用this代表實體成員
    class 類別
    {
        string 資料 = "World";
        public void 方法(string 資料)               //假設 資料="Hello"
        {
            System.Console.WriteLine( 資料 );       //顯示:Hello
            System.Console.WriteLine( this.資料 );  //顯示:World
        }
    }
    
  • 錯誤寫法:
    class 類別
    {
        public 類別()
        {
            System.Console.WriteLine( "A" );
        }
    
        public 類別(string 參數) :
        {
            this( );   // X 不能在敘述中使用this()當作無引數的建構函式
            類別( );    // X 不能直接呼叫建構函式
        }
    }
    
Δ 回到最上方

base

  • base代表父類別,可以用來識別父類別成員或子類別成員
    • class 父類別
      {
          virtual void 方法( ) { 
              System.Console.WriteLine("父類別方法"); 
          }
      }
      
      class 子類別 : 父類別
      {
          public override void 方法( ){ 
              System.Console.WriteLine("子類別方法"); 
          }
      
          public void 方法A( )
          {
              base.方法( );   //顯示:父類別方法
              方法( );        //顯示:子類別方法
              this.方法( );   //顯示:子類別方法
          }
      }
      
  • 代表父類別的建構函式
    • class 父類別
      {
          public 父類別() {
              System.Console.Write(" 父類別");
          }
      }
      
      class 子類別 : 父類別
      {
          public 子類別() : base()
          {
              System.Console.Write("子類別");     //顯示:父類別 子類別
          }
      }
      
  • 代表父類別的建構函式,並帶參數
    • class 父類別
      {
          public 父類別() { System.Console.Write(" 父類別A"); }
          public 父類別(string 參數) { System.Console.Write(" 父類別B"); }
      }
      
      class 子類別 : 父類別
      {
          public 子類別(string 參數) : base(參數)
          {
              System.Console.Write("子類別");     //顯示:子類別 父類別B
          }
      }
      
Δ 回到最上方