簡體   English   中英

多次實現具有事件的通用接口

[英]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;
}

並且無法使其正常工作,因為對於該編譯器而言,我需要使用正確的語法,並且如果我進行非顯式的實現,則會(如預期的那樣)收到錯誤消息:

成員已被聲明。

我該如何解決這個問題?

您必須明確告訴如何在事件上實現addremove ,因為這是一個明確的接口實現:

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; } }
}

我添加了一個默認實現,您可以將其用於實際事件,以使它們可以從您的類中訪問。

為什么? 可能是因為您不能僅從類中的成員名稱調用事件,所以調用事件處理程序將非常困難。

顯式接口的實現不能公開。 刪除public訪問器。

另外,如如何:實現接口事件(C#編程指南)中所述

為事件編寫顯式接口實現時,還必須編寫添加和刪除事件訪問器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM