クラス間で実際に変更する必要のないインターフェース内のメソッドを常に再入力する必要があります
全くない。基本クラスにインターフェイスを実装し、インターフェイスを実装するすべてのクラスに共通のメソッドを実装し、残りをabstract
- として宣言するだけで、派生物にそれを実装させることができます。
public interface MyInterface
{
void SomeCommonMethod(object whatever);
void SomeSpecialisedMethod(int someOtherParameter);
}
public abstract class MyBaseClass : MyInterface
{
public void SomeCommonMethod(object whatever)
{
//do some stuff
}
public abstract void SomeSpecialisedMethod(int someOtherParameter);
}
public class SomeSpecialisedClass : MyBaseClass
{
public override void SomeSpecialisedMethod(int someOtherParameter)
{
//do stuff that can't be done in the base class
}
}
これは、それを必要とするすべてのクラスでインターフェース実装を際限なく「再型付け」する必要を回避する方法を示しています。
そうは言っても、インターフェースを使用することは、多重継承と同じではありません。C# の初期には、これについて多くの議論がありました。一般的なコンセンサスは、現実の状況では多重継承の必要性は実際にはほとんどないということでした。個人的には、私のキャリアの中で実際にそれが必要になったのは数回だけであり、それらの場合には適切な回避策がありました.多重継承は単純にクリーンなアプローチでした.
私がインターフェイスに望む唯一のものは、多重継承でのフリーパスです
繰り返し ますが、インターフェイス内にも多重継承はありません。
1 つのインターフェイスは、他のいくつかのインターフェイスを実装し、独自の要件 (コントラクト) を定義することもできますが、決して継承ではありません。多重継承を近似することはできますが、適切な多重継承を実現することはできません。