2011-03-23 3 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

주/메소드가 호출되는 오버라이드 (override) : –

2

명시 적으로 상위 클래스를 호출 하시겠습니까? 그런 다음 base을 사용하십시오.

원하지 않는 경우 this을 사용하십시오.

Thisbase을 사용하는 좋은 예를 보여줍니다.

이 자식 클래스가 실제로 구현하지 않기 때문에 유일한 경우입니다
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(); 
     } 
    } 
} 
1

그냥 리드와 케빈의 대답은 설명합니다.
관련 문제