/// <summary> Вызов интерфейсного метода с помощью интерфейсной переменной </summary> private static void Example2() { IMyInterface b = new MyBaseClass(); b.Method(); // output: Base class implementation IMyInterface d = new MyDerivedClass2(); d.Method(); // output: MyDerivedClass2 implementation }
/// <summary> Вызов интерфейсного метода с помощью переменной базового типа и интерфейсоной переменной</summary> private static void Example3() { MyDerivedClass2 d = new MyDerivedClass2(); MyBaseClass b = d; Console.WriteLine(b == d); // True - экземпляры тождественны b.Method(); Console.WriteLine(b.GetType()); // output: Base class implementation // InterfaceMethodCall.MyDerivedClass2 ((IMyInterface)b).Method(); // output: MyDerivedClass2 implementation // для вызова интерфейсного метода CLR просматривает таблицу методов объекта-типа }