어떻게 든 파생 클래스가 항상 재정의 된 메서드 기반을 호출하도록 할 수 있습니까? C에서 기본 메서드가 호출되도록하십시오
public class BaseClass
{
public virtual void Update()
{
if(condition)
{
throw new Exception("..."); // Prevent derived method to be called
}
}
}
그리고 파생 클래스에서
:public override void Update()
{
base.Update(); // Forced call
// Do any work
}
내가 검색 한 가상이 아닌 업데이트()뿐만 아니라 보호 된 가상 UpdateEx()를 사용하는 제안을 발견했습니다. 다만 아주 청초하게 느끼지 않는다, 거기 더 나은 방법 있는가?
나는 당신이 질문을하기를 바랍니다. 그리고 나는 나쁜 영어로 유감입니다.
템플릿 메서드 패턴이 자주 사용되는 것이 좋지만 BCL은 "기본 클래스 메서드를 호출해야합니다"(anti?) 패턴을 많이 사용한다는 점에 유의해야합니다. 특히 Windows Forms 클래스에 해당합니다. – hemp
두 레벨의 계층 구조를 가지고 있다면 모든 레벨에서 기본 호출을 계속 강요하고 싶다면'UpdateImpl2'가 필요합니까? –
@DirkBoer : 모든 "손자"클래스가 호출되는 세 가지 메소드로 끝나야한다는 것을 의미합니까? 그렇다면 그렇습니다. 그 시점에서 디자인을 단순화하려고합니다. –