他のインターフェイスから継承するインターフェイスの明示的なC#インターフェイス実装

StackOverflow https://stackoverflow.com/questions/2796188

質問

次の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 { }
    }
}  
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top