如何避免"动态"事件订阅中的匿名方法?

Jen*_*ens 6 c# anonymous-methods

我怎么能重构这个方法

private void ListenToPropertyChangedEvent(INotifyPropertyChanged source,
                                          string propertyName)
{
    source.PropertyChanged += (o, e) =>
    {
        if (e.PropertyName == propertyName)
            MyMagicMethod();
    };
}
Run Code Online (Sandbox Code Playgroud)

如果我想避免在这里使用匿名方法?

dtb*_*dtb 4

显式实现由 lambda 隐式创建的闭包:

private void ListenToPropertyChangedEvent(INotifyPropertyChanged source,
                                          string propertyName)
{
    var listener = new MyPropertyChangedListener(propertyName);
    source.PropertyChanged += listener.Handle;
}

class MyPropertyChangedListener
{
    private readonly string propertyName;

    public MyPropertyChangedListener(string propertyName)
    {
        this.propertyName = propertyName;
    }

    public void Handle(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == this.propertyName)
        {
            // do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)