2013-05-02 2 views
7

내 하위 클래스에 속하며, 상속 된 보호 된 비 가상 메서드를 this.Method() 또는 base.Method()으로 참조해야합니까?this. vs base. 상속 된 보호 된 비 가상 메서드의 경우?

this을 사용하면 같은 이름의 새 메서드로 메서드를 쉽게 숨길 수 있습니다. 메소드에 대한 호출은 명시 적으로 기본 클래스의 구현 만이 호출되어야한다고 확신 할 때 base을 명시해야합니까?

+1

호출 할 때는 this.Method()를 호출하고 파생 된 클래스 내에서 구현 된 재정의 된 메서드 내에서 base :: Method()를 호출해야합니다. 나중에 무언가를 무효화 할 때 기본을 수행 할 필요가 없습니다. 메소드(); –

+0

가상 메서드가 아니므로 재정의 할 수 없습니다. 가상이 아닌 메소드는 숨길 수만 있습니다. – Monstieur

+2

왜 그냥'Method()'로 참조하지 않는 것일까 요? 'this'가 자신의'Method()'로 숨기면 호출됩니다. 그렇지 않으면'base.Method()'가 호출됩니다. 이것은 기본 동작으로 선택되었습니다. 아마 좋은 이유로.^_^ – Corak

답변

2

항상 this.Method()을 사용하여 전화하십시오.

메소드를 숨기면 기본 클래스에있는 메소드 대신 새 메소드를 호출 할 수 있습니다. 반면에, 기본 클래스의 메쏘드를 가상으로 만들면, 다형성 (polymorphic) 인 방법으로 호출 할 수 있도록 코드를 만들고 싶을 것이다.

미래를 예측하기는 어렵지만 이러한 시나리오가 발생할 가능성이 더 큽니다.

7

보조 클래스에 Method이라는 회원을 추가하고 계속 상속 된 메소드를 호출하려는 경우 base.Method()을 사용해야합니다. 더 파생 된 클래스에 Method이라는 멤버를 추가해도 this.Method() 호출의 의미는 변경되지 않습니다.