从其他接口继承的接口的显式C#接口实现

5

Consider the following three interfaces:

interface IBaseInterface
{
    event EventHandler SomeEvent;
}

interface IInterface1 : IBaseInterface
{
    ...
}

interface IInterface2 : IBaseInterface
{
    ...
}

现在考虑以下实现了IInterface1和IInterface2的类:
class Foo : IInterface1, IInterface2
{
    event EventHandler IInterface1.SomeEvent
    {
        add { ... }
        remove { ... }
    }

    event EventHandler IInterface2.SomeEvent
    {
        add { ... }
        remove { ... }
    }
}

这会导致错误,因为SomeEvent不是IInterface1或IInterface2的一部分,而是IBaseInterface的一部分。

那么,类Foo如何同时实现IInterface1和IInterface2呢?

3个回答

5

SomeEvent不属于IInterface1或IInterface2,它是IBaseInterface的一部分。

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

5
你可以使用泛型:
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 { ... }
    }
}    

我喜欢你的风格,先生。 - anthony

2
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 { }
    }
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接