![](/img/trans.png)
[英]Implement multiple times the same generic interface that includes properties with different type parameters
[英]Implement generic interface with event multiple times
我有一個通用接口,看起來像這樣:
public interface IObjectProvider<out T>
{
event Action<T> ValueOccured;
}
現在,我想創建一個類,該類兩次實現此接口,如下所示:
public class GlobalReceiver : IObjectProvider<Foo>, IObjectProvider<Bar>
{
public event Action<Foo> IObjectProvider<Foo>.ValueOccured;
public event Action<Bar> IObjectProvider<Bar>.ValueOccured;
}
並且無法使其正常工作,因為對於該編譯器而言,我需要使用正確的語法,並且如果我進行非顯式的實現,則會(如預期的那樣)收到錯誤消息:
成員已被聲明。
我該如何解決這個問題?
您必須明確告訴如何在事件上實現add
和remove
,因為這是一個明確的接口實現:
public class GlobalReceiver : IObjectProvider<Foo>, IObjectProvider<Bar>
{
private event Action<Foo> ActionFoo;
event Action<Foo> IObjectProvider<Foo>.ValueOccured { add { ActionFoo += value; } remove { ActionFoo -= value; } }
private event Action<Bar> ActionBar;
event Action<Bar> IObjectProvider<Bar>.ValueOccured { add { ActionBar += value; } remove { ActionBar -= value; } }
}
我添加了一個默認實現,您可以將其用於實際事件,以使它們可以從您的類中訪問。
為什么? 可能是因為您不能僅從類中的成員名稱調用事件,所以調用事件處理程序將非常困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.