Adding and Removing Anonymous Event Handler

后端 未结 6 1968
野性不改
野性不改 2020-11-29 02:14

I was wondering if this actually worked ?

private void RegisterKeyChanged(T item) 
{
    item.OnKeyChanged += (o, k) => ChangeItemKey((T)o, k);
}

private         


        
6条回答
  •  生来不讨喜
    2020-11-29 03:01

    For anyone interested, you can add and remove an anonymous event handler like this

    public class Musician
    {
        public void TuneGuitar()
        {
            Metronome metronome = new Metronome();
    
            EventHandler handler = null;
            handler = (sender, args) =>
            {
                // Tune guitar
                // ...
    
                // Unsubscribe from tick event when guitar sound is perfect
                metronome.Tick -= handler;
            };
    
            // Attach event handler
            metronome.Tick += handler;
        }
    }
    
    public class Metronome
    {
        event EventHandler Tick;
    }
    

    UPDATE: In C# 7.0 we have supports for local functions so the TuneGuitar method can now be written as:

    public void TuneGuitar()
    {
        Metronome metronome = new Metronome();
    
        void handler(object sender, EventArgs args)
        {
            // Tune guitar
            // ...
    
            // Unsubscribe from tick event when guitar sound is perfect
            metronome.Tick -= handler;
        };
    
        // Attach event handler
        metronome.Tick += handler;
    }
    

提交回复
热议问题