簡體   English   中英

引發明確的實施事件

[英]Raising explicit implemented event

考慮以下星座。

public delegate void BarHandler(Foo sender, FooEventArgs<Object> args);
public delegate void BarHandler<T>(Foo<T> sender, FooEventArgs<T> args);

public interface Foo
{
    Object Value
    { get; }

    event BarHandler BarEvent;

    void Update();
}

public interface Foo<T> : Foo
{
    new T Value
    { get; }

    new event BarHandler<T> BarEvent;
}

public class Baz<T> : Foo<T>
{
    Object Foo.Value
    { get { return Value; } }

    public T Value
    { get; set; }

    private BarHandler handler;

    event BarHandler Foo.BarEvent
    {
        add{ handler += value; }
        remove{ handler -= value; }
    }

    public event BarHandler<T> BarEvent;

    public void Update()
    {
        BarEvent(this, new FooEventArgs<T>());
        (this as Foo).BarEvent(this, new FooEventArgs<Object>());
    }
}

我有一個接口和一個擴展第一個接口的通用接口,以及一個擴展了通用接口的類。 通用接口通過new關鍵字隱藏了非通用接口。 Update方法應同時引發非通用方法和通用方法。 這就是我目前正在處理的問題。 產生的錯誤是:

The event BarEvent can only appear on the left hand side of += or -= when used outside of Foo.

但是我在Foo,還是想念什么?

因此,我想要的是,無論客戶端已注冊哪個事件,都應得到通知。 我還應該提到,添加和刪除都必須起作用,因此委托或類似的東西是沒有選擇的。

只需使用私有handler變量,就可以解決問題。

public void Update()
{
    BarEvent(this, new FooEventArgs<T>());
    handler(this, new FooEventArgs<Object>());
}

檢查BarEventhandler是否為null也是一個好主意。

暫無
暫無

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

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