Monday, November 17, 2014

Inheritance from multiple interfaces with the same method name

Credits: Pete
By implementing the interface explicitly, like this:
public interface ITest {
    void Test();
}
public interface ITest2 {
    void Test();
}
public class Dual : ITest, ITest2
{
    void ITest.Test() {
        Console.WriteLine("ITest.Test");
    }
    void ITest2.Test() {
        Console.WriteLine("ITest2.Test");
    }
}
When using explicit interface implementations, the functions are not public on the class. Therefore in order to access these functions, you have to first cast the object to the interface type, or assign it to a variable declared of the interface type.
var dual = new Dual();
// Call the ITest.Test() function by first assigning to an explicitly typed variable
ITest test = dual;
test.Test();
// Call the ITest2.Test() function by using a type cast.
((ITest2)dual).Test();

Also I believe in above case you won't be able to make ITest.Test() or ITest2.Test as public - you can only call the Test() function by casting or assigning to a variable. You can make it public only if you have a single implementation:

 public void Test()
    {
        Console.WriteLine("Test method in Dual");
    }

No comments:

Post a Comment