나는 MethodName()
의 상속 된 클래스 오버라이드에서 base.MethodName()
을 호출해야하는 많은 프레임 워크와 도우미 클래스를 보아 왔습니다. 그러나 일부는 오버라이드 된 메소드에서 마지막 호출이되도록 요구하는 반면, 다른 메소드는 첫 번째 호출을 요구합니다. 어느 방법으로 호출해야하는지는 항상 명확하지 않으며 일반적으로 문서 또는 샘플을 읽음으로써 만 알아낼 수 있습니다.기본 호출 순서 규칙을 재정의 하시겠습니까?
그래서 내가 그 지역에서 몇 가지 모범 사례가없고, 메소드 base
에 대한 호출은 오버 라이드 된 메소드가 프레임 워크 디자이너에만 의존한다는 결론에 달렸습니까? 아니면 다른 디자인보다 디자인을 더 선호해야합니까? 개인적으로 나는 생성자 에서처럼 훨씬 더 자연스러운 것을 기본으로하는 것을 찾는다. (이 디자인이 시행된다.) 또는 개발자가 특정 호출 순서를 사용하도록하는 몇 가지 상황 (또는 영역)이 있습니까?
업데이트. @Attila의 도움을 받아 이제 대부분의 base
클래스 호출을 다시 디자인 할 수 있습니다. 대신이의 :
// FRAMEWORK
public virtual void SomeMethod()
{
// framework code
}
// USAGE
public override void SomeMethod()
{
base.SomeMethod();
// user code
}
이 작업을 수행 :
// FRAMEWORK
public void SomeMethod()
{
// framework code
// you can place UserSomeMethod where you want,
// you can change it position in new versions of a fremework
// without breaking user code
this.SomeMethodUserCode();
}
protected abstract void SomeMethodUserCode();
// USAGE
protected override void SomeMethodUserCode()
{
// user code
}
사용자는 유연성을 푼다 ("중단, 또는 잘못된 당신의 프레임 워크 작업을 할 적은 옵션이 있습니다"로 읽을 수 있습니다)하지만 사용법은 간단합니다.
기본 사항을 전혀 언급하지 않는 것이 좋습니다. 필수 우선 순위는 추상 IMHO 여야합니다. 우리는 requred'base.'를 가진 프레임 워크를 호출하면 나쁜 설계를 호출 할 수 있습니까? 그게 문제를 해결합니다! :-) –
나는 그것이 상황에 달려 있다고 생각한다 : 일을하는 특정한 순서가 있지만 계산의 일부를 사용자 정의 할 수있는 경우 기본 호출 추상 메서드가 가장 좋은 방법이다. 계산이 하나의 특정 방법으로 설명 될 수없는 경우, 공통적이지만 고정 된 계산을 수행하도록 호출 기반 호출이 더 나은 방법입니다. – Attila