How to convert EventArgs when posting events?

In .NET applications, events are usually related as follows:

    public event EventHandler<ChangeEventArgs> OnChange
    {
        add { _dependency.OnChange += value; }
        remove { _dependency.OnChange -= value; }
    }

However, this only works if the wired events have the same event handler. In my current case, the args source events are the property of the library, and I do not want to disclose this to the client code. So I have some kind of adapter (ChangeEventArgs). How can I use the above code to convert event arguments? I present something like below (but below code does not work)

    public event EventHandler<ChangeEventArgs> OnChange
    {
        add { _dependency.OnChange += Convert(value); }
        remove { _dependency.OnChange -= Convert(value); }
    }

or

    public event EventHandler<ChangeEventArgs> OnChange
    {
        add { _dependency.OnChange += value(this, Convert(args)); }
        remove { _dependency.OnChange -= value(this, Convert(args)); }
    }
+5
source share
2 answers

Try the following:

public class SomeClassAdapter
{
    private readonly SomeClass obj;

    public SomeClassAdapter(SomeClass obj)
    {
        this.obj = obj;
        this.obj.SomeEvent += HandleSomeClassSomeEvent;
    }

    private void HandleSomeClassSomeEvent(object sender, SomeEventArgs args)
    {
        OnSomeEvent(ConvertEventArgs(args));
    }

    private MyEventArgs ConvertEventArgs(SomeEventArgs args)
    {
        // the magic goes here...
    }

    protected virtual void OnSomeEvent(MyEventArgs args)
    {
        var handler = SomeEvent;
        if (handler != null)
        {
            handler(this, args);
        }
    }

    public event EventHandler<MyEventArgs> SomeEvent;
}

Update.
, . SomeClassAdapter SomeClass ( SomeClass obj).

SomeClassAdapter.SomeEvent. , , SomeClass.SomeEvent. SomeClass.SomeEvent , (HandleSomeClassSomeEvent). SomeEventArgs MyEventArgs SomeClassAdapter.SomeEvent.

, : SomeClass.SomeEventHandleSomeClassSomeEventSomeClassAdapter.SomeEvent. "- ".

+3

, , , Convert() SupportedChangeEventArgs

:

public event EventHandler<SupportedChangeEventArgs> Changed; // per http://msdn.microsoft.com/en-us/library/h0eyck3s%28v=vs.71%29.aspx

,

public virtual void OnChanged(ChangeEventArgs e)
{
    if( Changed != null )
    {
        Changed(this, Convert(e));
    }
}
0

All Articles