4

继承考虑以下三个接口:明确C#接口实现,从其他接口

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?

回答

4

您可以使用泛型:

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 { ... } 
    } 
}  
+0

我喜欢你的副臂,先生。 – anthony 2011-01-07 08:00:49

4

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

class Foo : IInterface1, IInterface2 
{ 
    event EventHandler IBaseInterface.SomeEvent { 
     add { ... } 
     remove { ... } 
    } 
} 
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 { } 
    } 
} 
+0

有人,请格式化此。 – kzh 2011-01-07 20:55:54