동료와 기본 클래스와 인터페이스의 관계에 대한 의견이 다릅니다. 인터페이스 구현이 필요할 때 해당 클래스를 사용할 수 없다면 클래스가 인터페이스를 구현해서는 안된다고 생각합니다. 즉, 다음과 같은 코드를보고 싶습니다.
interface IFooWorker { void Work(); }
abstract class BaseWorker {
... base class behaviors ...
public abstract void Work() { }
protected string CleanData(string data) { ... }
}
class DbWorker : BaseWorker, IFooWorker {
public void Work() {
Repository.AddCleanData(base.CleanData(UI.GetDirtyData()));
}
}
DbWorker는 IFooWorker 인터페이스를 얻는 것인데, 인터페이스의 인스턴스화 가능한 구현이기 때문입니다. 계약을 완전히 이행합니다. 내 동료는 거의 동일한 것을 선호합니다.
interface IFooWorker { void Work(); }
abstract class BaseWorker : IFooWorker {
... base class behaviors ...
public abstract void Work() { }
protected string CleanData(string data) { ... }
}
class DbWorker : BaseWorker {
public void Work() {
Repository.AddCleanData(base.CleanData(UI.GetDirtyData()));
}
}
기본 클래스가 인터페이스를 얻는 곳에서 이로 인해 기본 클래스의 모든 상속자도 해당 인터페이스에 있습니다. 이것은 나에게 버그가 있지만 "기본 클래스 외부에서 인터페이스 구현으로 독자적으로 설 수는 없습니다"라는 구체적인 이유를 생각해 낼 수 없습니다.
그의 방법 대 나의 방법의 장단점은 무엇이며 왜 하나를 다른 것보다 사용해야합니까?
Work
상속하는 것은 다이아몬드 상속 문제입니다 (이 경우 둘 다 Work
메소드에 대한 계약을 이행 함 ). Java에서는 인터페이스의 메소드를 구현 Work
해야하므로 프로그램이 사용해야 하는 메소드의 문제를 피할 수 있습니다. 그러나 C ++과 같은 언어는이를 명확하게하지 않습니다.