Explicit C # interface interface implementation for interfaces that inherit from other interfaces

Consider the following three interfaces:

interface IBaseInterface { event EventHandler SomeEvent; } interface IInterface1 : IBaseInterface { ... } interface IInterface2 : IBaseInterface { ... } 

Now consider the following class that implements both IInterface1 and IInterface 2:

 class Foo : IInterface1, IInterface2 { event EventHandler IInterface1.SomeEvent { add { ... } remove { ... } } event EventHandler IInterface2.SomeEvent { add { ... } remove { ... } } } 

This results in an error because SomeEvent is not part of IInterface1 or IInterface2, it is part of IBaseInterface.

How can the Foo class implement both IInterface1 and IInterface2?

+4
source share
3 answers

You can use generics:

 interface IBaseInterface<T> where T : IBaseInterface<T> { event EventHandler SomeEvent; } interface IInterface1 : IBaseInterface<IInterface1> { ... } interface IInterface2 : IBaseInterface<IInterface2> { ... } class Foo : IInterface1, IInterface2 { event EventHandler IBaseInterface<IInterface1>.SomeEvent { add { ... } remove { ... } } event EventHandler IBaseInterface<IInterface2>.SomeEvent { add { ... } remove { ... } } } 
+4
source

SomeEvent is not part of IInterface1 or IInterface2, its part of IBaseInterface.

 class Foo : IInterface1, IInterface2 { event EventHandler IBaseInterface.SomeEvent { add { ... } remove { ... } } } 
+4
source
 interface IBaseInterface { event EventHandler SomeEvent; } interface IInterface1 : IBaseInterface { event EventHandler SomeEvent; } interface IInterface2 : IBaseInterface { event EventHandler SomeEvent; } class Foo : IInterface1, IInterface2 { public event EventHandler SomeEvent { add { } remove { } } event EventHandler IInterface1.SomeEvent { add { } remove { } } event EventHandler IInterface2.SomeEvent { add { } remove { } } } 
+2
source

Source: https://habr.com/ru/post/1309222/


All Articles