Interface member hiding : Explicit Interface Implementation « Class « C# / CSharp Tutorial






using System;


public interface InterfaceA
{
  void MethodA();
}


public interface InterfaceB : InterfaceA
{
  new void MethodA();  // hides MethodA() in InterfaceA
}

public class MyClass : InterfaceB
{

  void InterfaceB.MethodA()
  {
    Console.WriteLine("InterfaceB implementation of MethodA()");
  }

  public void MethodA()
  {
    Console.WriteLine("InterfaceA implementation of MethodA()");
  }

}


class MainClass
{
  public static void Main()
  {
    MyClass myClass = new MyClass();

    Console.WriteLine("Calling myClass.MethodA()");
    myClass.MethodA();

    InterfaceB mySteerable = myClass as InterfaceB;
    Console.WriteLine("Calling mySteerable.MethodA()");
    mySteerable.MethodA();

    InterfaceA myDrivable = myClass as InterfaceA;
    Console.WriteLine("Calling myDrivable.MethodA()");
    myDrivable.MethodA();

  }

}
Calling myClass.MethodA()
InterfaceA implementation of MethodA()
Calling mySteerable.MethodA()
InterfaceB implementation of MethodA()
Calling myDrivable.MethodA()
InterfaceA implementation of MethodA()








7.34.Explicit Interface Implementation
7.34.1.Interface member hiding
7.34.2.Explicit Interface Implementation
7.34.3.Explicit interface implementation and its own implementation
7.34.4.Explicitly implement an interface member
7.34.5.Use explicit implementation to remove ambiguity