明示的なインターフェースメンバの実装とは、同一のシグニチャを持つインターフェイスを複数実装する場合に、インターフェイスメンバを完全限定名で実装することにより、実行時に意識している型に応じて振る舞いを切り替える実装方法です。
 完全限定名を指定してメソッドを実装すると、インターフェースの型へキャストしなければ、そのメソッドにアクセスできません。
 また、完全限定名を指定したメソッドは、アクセス修飾子をつけずとも、暗黙的に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

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます