他のインターフェイスから継承するインターフェイスの明示的なC#インターフェイス実装
-
04-10-2019 - |
質問
次の3つのインターフェイスを検討してください。
interface IBaseInterface
{
event EventHandler SomeEvent;
}
interface IInterface1 : IBaseInterface
{
...
}
interface IInterface2 : IBaseInterface
{
...
}
次に、iinterface1とiinterface 2の両方を実装する次のクラスを検討してください。
class Foo : IInterface1, IInterface2
{
event EventHandler IInterface1.SomeEvent
{
add { ... }
remove { ... }
}
event EventHandler IInterface2.SomeEvent
{
add { ... }
remove { ... }
}
}
これにより、SomeEventはiinterface1またはiinterface2の一部ではないため、IbaseInterfaceの一部であるため、エラーが発生します。
クラスFOOはどのようにしてiinterface1とiinterface2の両方を実装できますか?
解決
ジェネリックを使用できます:
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 { ... }
}
}
他のヒント
SomeEventはIinterface1またはiinterface2の一部ではなく、IbaseInterfaceの一部です。
class Foo : IInterface1, IInterface2
{
event EventHandler IBaseInterface.SomeEvent {
add { ... }
remove { ... }
}
}
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 { }
}
}
所属していません StackOverflow