私は以下のコードを持っています。
interface IFirst
{
void Show();
}
public class Test : IFirst
{
void IFirst.Show()
{
Console.WriteLine("First");
}
}
ここで実装クラスでは、Show()のパブリックアクセス指定子を提供できません。メインプログラムからこのShow()を呼び出すにはどうすればよいですか?
試す、
IFirst obj = new Test();
obj.Show();
明示的なインターフェイスメソッドにはインターフェイスを使用してのみアクセスでき、それらを実装するクラスではアクセスできないため、変数をインターフェイスタイプにキャストする必要があります。明示的なインターフェイス実装の使用は、コードカプセル化の形式であり、クラスの実装の詳細を非表示にすることができます(競合するメソッドの名前を持つ多くのインターフェイスを実装することもできます)。
Test test = new Test();
var casted = test as IFirst;
casted.Show();
また、メソッドに変数を送信する暗黙のキャストを使用することもできます。
public void ShowMeATrick(IFirst first) {
first.Show();
}
Test test = new Test();
ShowMeATrick(test);
明示的なインターフェイスメソッドには、インターフェイスを介してのみアクセスでき、それらを実装するクラスを介してアクセスすることはできません。
コードでは、クラスのインスタンスをインターフェースにキャストしてから、明示的に定義されたメソッド/プロパティを参照できます。
明示的なインターフェイスに関するMSDNリンク:http: //msdn.microsoft.com/en-us/library/ms173157%28v=vs.100%29.aspx
同様のことを尋ねる別の質問: コンパイルエラー:インターフェイスを明示的に実装しているときに、「修飾子'public'はこのアイテムには無効です」