記録のために、私はすでにこの接続アイテムを見ましたが、これをサポートする上で何が問題になるのか本当に理解できません。
次のコードがあるとします。
public interface IInterface
{
void Method();
}
public class Base : IInterface
{
virtual void IInterface.Method()
{
throw new NotImplementedException();
}
}
仮想識別子の問題は何ですか?仮想モディファイアがあるとoverride
、基本クラスに別の実装があることを示すことができます。仮想メソッドを削除し、次のような派生クラスを作成することで、これを機能させることができます。
public class Derived : IInterface
{
void IInterface.Method()
{
throw new NotImplementedException();
}
}
ただし、この方法では、何かをオーバーライドしていることをまったく示していません。
更新:
C#(パート:20.4.1明示的なインターフェイスメンバーの実装)仕様によると、2つの理由があります。
- 特定のメソッドの非表示(私はそれを使用しています)。
- シグニチャは同じでリターンタイプが異なる2つの関数があります(たとえば、IClonableに役立ちます)。
ただし、これらのメソッドを仮想化できない理由については何も述べていません。
Update2:
答えを考えると、ここで本当の質問を言い換えるべきだと思います。上記の2つの理由が、そもそもインターフェースの明示的な実装が可能になった理由である場合。メソッドを仮想化すると、なぜ問題になるのでしょうか。