インターフェイスを実装するには、次の2つの方法があります。
interface IMyInterface
{
void Foo();
}
class IImplementAnInterface : IMyInterface
{
public void Foo()
{
}
}
// var foo = new IImplementAnInterface();
// foo.Foo(); //Ok
// ((IMyInterface)foo).Foo(); //Ok
class IExplicitlyImplementAnInterface : IMyInterface
{
void IMyInterface.Foo()
{
}
}
// var foo = new IExplicitlyImplementAnInterface();
// foo.Foo(); //ERROR!
// ((IMyInterface)foo).Foo(); //Ok
違いは、インターフェイスが明示的に実装されている場合、誰かがFoo
メソッドを呼び出すことを許可される前に、実際に指定されたインターフェイスとしてキャストする必要があることです。
どちらを使用するかをどのように決定しますか?