VS2010 には、インターフェイスを実装するための 2 つのオプションがあります。
IHelper.cs インターフェイスが次のようになっている場合:
public interface IHelper
....
IEnumerable<IPort> Ports { get; }
「インターフェースを明示的に実装する」では次のコードが提供されます:
IEnumerable<IPort> IHelper.Ports
{
get
{
...
}
}
そして、「インターフェースの実装」では次のコードが生成されます:
public IEnumerable<IPort> Ports
{
get
{
...
}
}
それらは同じですか、それとも違いますか? C# でインターフェイスを実装する際に 2 つのオプションがあるのはなぜですか?
ベストアンサー1
明示的なインターフェース宣言は、インターフェース メンバーがインターフェース自体以外の型では使用できないことを意味します。そのため、実装する型は、パブリックにアクセスする前にインターフェースにキャストする必要があります。
暗黙的は、ほとんどのインターフェースが実装される標準的な方法であり、実装タイプのパブリック API でインターフェース項目を公開します。
主な理由明示的なインターフェース定義の目的は、同じシグネチャを持つメソッドを含む 2 つのインターフェースを実装した場合に、名前の競合を回避することです。明示的な定義により、コンパイラはシグネチャを解決できるほど明確に区別することができます。
XenoPuTtSs がコメントで示唆しているように、コードのメンテナンスをサポートする 2 番目の理由は、メソッド シグネチャが削除された場合、明示的な定義によって実装型でコンパイラ エラーが発生することです。暗黙的な実装では、インターフェイスからメソッドを削除すると、そのメソッドは任意の型の通常のメンバーとして残ります。つまり、現在は廃止されたメソッド実装を手動で検索する必要があります。