まず第一に、インターフェイスの継承は問題ありません。クラスの継承と同じように適用でき、非常に強力なツールです。
インターフェイスは動作を記述します。たとえば、クラスが「できる」ことをインターフェイスが定義しているとしましょう。したがって、宣言しているインターフェイスを実装すると、そのインターフェイスが指定することを実行できます。例えば:
interface ISubmergible
{
void Submerge();
}
そのため、クラスがインターフェイスを実装している場合、それは沈没する可能性があることは明らかです。それにもかかわらず、一部のインターフェースは他のインターフェースを暗示しています。たとえば、このインターフェースを想像してみてください。
interface IRunner
{
void Run();
}
これは、それを実装するクラスが実行できることを示すインターフェイスを定義します...それでも、プログラムのコンテキストでは、何かを実行できる場合は明らかに歩くことができるため、それが満たされていることを確認する必要があります。
interface IWalker
{
void Walk();
}
interface IRunner : IWalker
{
void Run();
}
最後に、NotImplementedException 全体について...いくつかの提案に驚いています。クラスのインターフェイス メソッドによってNotImplementedException が発生することは決してありません。インターフェイスを実装する場合、インターフェイスが確立する契約を明示的に受け入れている場合、NotImplementedException を発生させた場合、基本的には「わかりました。嘘をつきました。インターフェイスをサポートしていると言いましたが、実際にはサポートしていません」と言っています。
インターフェースは、クラスが何を実装し、何を実装しないかについて心配する必要がないようにするためのものです。それを取り除けば、彼らは役に立たない。さらに重要なことは、たとえあなたが自分のしていることを理解しているとしても、あなたの仲間はそのような行動を期待するでしょう。たとえあなたが何をしているかを理解していても、チームの他のメンバーはそうではなく、あなたでさえ、今から 6 か月後にはその背後にあるロジックを理解していないでしょう。したがって、class2 は常識とインターフェイスの目的に違反しています。Class2 は IBase を実装していないため、実装していると主張しないでください。