2011-03-23 63 views
4

如果您正在從基類繼承的類中編寫代碼,並且您希望在該基類上調用受保護或公共方法,是否最好(對或錯或否則)撥打base.MyProtectedMethod()this.MyProtectedMethod()(在C#中)?區別是什麼?兩者似乎都有效。您是否應該調用base.methodName或this.methodName

例如:

public class MyBase() 
{ 
    .... 

    protected void DoStuff() 
    { 
     // some stuff 
    } 

} 

public class MyChildClass() : MyBase 
{ 

    public MyNewMethod() 
    { 
     // do some work 

     this.DoStuff(); 
     base.DoStuff(); 
    } 
} 

MyNewMethod這是否只是爲了同樣的事情兩次?

回答

10

這在MyNewMethod中完全一樣。

我只會建議在實際需要時使用base.,即:當您需要從重寫的方法內顯式調用方法的基類版本時。

+2

請注意,這僅僅是因爲孩子上課不實際執行情況/覆蓋被調用的方法。 – 2011-03-23 01:06:36

2

你想顯式調用父類嗎?然後使用base

如果您不想要,請使用this

This顯示了使用base的一個很好的例子。

1

只是想說明Reed和凱文的答案:

namespace ConsoleApplication1 
{ 
    class A 
    { 
     public virtual void Speak() 
     { 
      Hello(); 
     } 
     virtual protected void Hello() 
     { 
      Console.WriteLine("Hello from A"); 
     } 
    } 

    class B : A 
    { 
     public override void Speak() 
     { 
      base.Hello(); //Hello from A 
      this.Hello(); //Hello from B 
     } 

     override protected void Hello() 
     { 
      Console.WriteLine("Hello from B"); 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      B b = new B(); 
      b.Speak(); 
     } 
    } 
} 
相關問題