最終更新: chipstar_light 2011年02月10日(木) 17:58:46履歴
明示的なインターフェースメンバの実装とは、同一のシグニチャを持つインターフェイスを複数実装する場合に、インターフェイスメンバを完全限定名で実装することにより、実行時に意識している型に応じて振る舞いを切り替える実装方法です。
完全限定名を指定してメソッドを実装すると、インターフェースの型へキャストしなければ、そのメソッドにアクセスできません。
また、完全限定名を指定したメソッドは、アクセス修飾子をつけずとも、暗黙的にpublicになり、abstract、virtual、orverride、new修飾子をつける事はできません。
完全限定名を指定してメソッドを実装すると、インターフェースの型へキャストしなければ、そのメソッドにアクセスできません。
また、完全限定名を指定したメソッドは、アクセス修飾子をつけずとも、暗黙的にpublicになり、abstract、virtual、orverride、new修飾子をつける事はできません。
- 実験コード
public interface Interface1 { string MethodA(); string MethodB(); } public interface Interface2 { string MethodA(); string MethodC(); } public class Class1 : Interface1, Interface2 { public virtual string MethodA() { return "Interface1のメソッドA"; } public string MethodB() { return "Interface1のメソッドB"; } string Interface2.MethodA() { return "Interface2のメソッドA"; } public string MethodC() { return "Interface2のメソッドC"; } public static int Main(string[] args) { Class1 c1 = new Class1(); Console.WriteLine("c1.MethodA() = " + c1.MethodA()); Console.WriteLine("c1.MethodB() = " + c1.MethodB()); Console.WriteLine("c1.MethodC() = " + c1.MethodC()); Interface1 f1 = c1; Console.WriteLine("f1.MethodA() = " + f1.MethodA()); Console.WriteLine("f1.MethodB() = " + f1.MethodB()); Interface2 f2 = c1; Console.WriteLine("f2.MethodA() = " + f2.MethodA()); Console.WriteLine("f2.MethodC() = " + f2.MethodC()); return 0; } }
- 出力結果
c1.MethodA() = Interface1のメソッドA c1.MethodB() = Interface1のメソッドB c1.MethodC() = Interface2のメソッドC f1.MethodA() = Interface1のメソッドA f1.MethodB() = Interface1のメソッドB f2.MethodA() = Interface2のメソッドA f2.MethodC() = Interface2のメソッドC
コメントをかく