In .NET applications, normally events are wired this way:
public event EventHandler<ChangeEventArgs> OnChange
{
add { _dependency.OnChange += value; }
remove { _dependency.OnChange -= value; }
}
However this only works if the events being wired have the same event handler. In my current case, the original event args is proprietary of a library, and I don’t want to expose that to the client code. So I have some kind of adapter (ChangeEventArgs). How can I use the code above to convert the event args? I imagine something like below (but below code doesn’t 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)); }
}
Try this:
Update.
This code uses more complex version of adapter pattern, than your code does.
SomeClassAdapteris an adapter forSomeClass(it hasSomeClassinstance in its private fieldobj).Client code subscribes to my
SomeClassAdapter.SomeEvent. My code, in turn, subscribes toSomeClass.SomeEvent. WhenSomeClass.SomeEventis fired, my event handler (HandleSomeClassSomeEvent) is called. This event handler convertsSomeEventArgstoMyEventArgsand raisesSomeClassAdapter.SomeEvent.So, we have the chain:
SomeClass.SomeEvent->HandleSomeClassSomeEvent->SomeClassAdapter.SomeEvent. Looks like “event proxy”.