可能性のある複製:
C#:インターフェイス-暗黙的および明示的な実装
誰かがこれらの2つの獣の違いとそれらの使用方法を説明しますか?私の知る限り、多くのpre.2.0クラスはジェネリック型なしで実装されていたため、後者のバージョンでは両方の種類のインターフェースを実装していました。それらを使用する必要があるのはなぜですか?
また、それらの使用方法を詳細に説明できますか?
ありがとう
基本的に、暗黙的なインターフェイスの実装では、インターフェイスメソッドとプロパティにクラスの一部であるかのようにアクセスします。明示的なインターフェイス実装では、そのインターフェイスとして扱う場合にのみアクセスできます。
どちらを使用するかという点では、インターフェイスと同じシグネチャを持つプロパティ/メソッドがあるか、同じシグネチャを持つ2つのインターフェイスを実装し、一致するプロパティ/メソッド。
以下のルールは、ブラッドエイブラムスによるものです デザインガイドラインブログ 。
また、Bradのブログのコメントで、値の型で明示的な実装を使用する場合はボックス化が関係しているため、パフォーマンスコストに注意してください。
素人の言葉で言えば、クラスが2つ以上のインターフェイスを継承し、インターフェイスが同じメソッド名を持っている場合、暗黙的なインターフェイス実装を使用すると、クラスはどのインターフェイスメソッドが実装されているかを知りません。これは、インターフェイスを明示的に実装するシナリオの1つです。
暗黙的なインターフェイスの実装
public class MyClass : InterfaceOne, InterfaceTwo
{
public void InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
}
interface InterfaceOne
{
void InterfaceMethod();
}
interface InterfaceTwo
{
void InterfaceMethod();
}
明示的なインターフェースの実装
public class MyClass : InterfaceOne, InterfaceTwo
{
void InterfaceOne.InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
void InterfaceTwo.InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
}
interface InterfaceOne
{
void InterfaceMethod();
}
interface InterfaceTwo
{
void InterfaceMethod();
}
次のリンクには、この概念を説明する優れたビデオがあります
明示的なインターフェイスの実装
迷宮の実装自体から、それを見るもう1つの方法があります: http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx 。
しかし、要するに、暗黙の実装はis-a型変換を提供し、オブジェクトがそのインターフェイス型に明示的に型キャストされない限り、明示的な実装はアクセスできません。