当前位置:  开发笔记 > 编程语言 > 正文

- = new EventHandler(Method)vs - =将方法作为参数传递时的方法

如何解决《-=newEventHandler(Method)vs-=将方法作为参数传递时的方法》经验,为你挑选了1个好方法。

- = new EventHandler(Method)与 - =方法 当方法作为参数传递时有什么区别?

为什么removeNew无法取消订阅?

看下面的课:

public class Class1
{
    public EventHandler _eh;

    public void OnEvent()
    {
        if (_eh != null)
        {
            _eh.Invoke("", new EventArgs());
        }
    }

    public void remove(EventHandler evHandler)
    {
        // unsubscribe successfully
        _eh -= evHandler;
    }

    public void removeNew(EventHandler evHandler)
    {
        // failed to unsubscribe
        _eh -= new EventHandler(evHandler);
    }
}

更新:

@SchabseLaks,只是为了清除我的查询我正在添加调用此方法的代码:

public partial class Form1 : Form
{
    Class1 c1 = new Class1();
    public Form1()
    {
        InitializeComponent();
        c1._eh += Hello;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        c1.OnEvent();
    }

    private void Hello(object sender, EventArgs e)
    {
        MessageBox.Show("hello");
    }

    private void button2_Click(object sender, EventArgs e)
    {
        c1.removeNew(Hello);
    }

    private void button3_Click(object sender, EventArgs e)
    {
        c1.remove(Hello);
    }
}

SLaks.. 7

委托只能从方法创建.

new EventHandler(evHandler)是简写new EventHandler(evHandler.Invoke),因为Invoke是实际调用委托的任何委托类型的方法.

由于你_eh没有evHandler.Invoke作为处理程序,所以什么都不做.



1> SLaks..:

委托只能从方法创建.

new EventHandler(evHandler)是简写new EventHandler(evHandler.Invoke),因为Invoke是实际调用委托的任何委托类型的方法.

由于你_eh没有evHandler.Invoke作为处理程序,所以什么都不做.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有