C#【理解事件委托的误区】

事件

事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件

委托 delegate 相当于定义一个函数类型。

事件是建立在委托之上的 event 相当于定义一个 delegate 的函数指针(回调函数指针)

事件使对象或类 具备了通知,并执行其他类的方法的能力

原理:

如 当上课铃向时,学生进入教室, 老师开始上课
将其中的要素拆解
铃: 发布者
响铃 : 事件触发,发布消息
学生老师 :订阅者
进入教室和上课 :事件的执行函数

误区 代码要反着去理解

向上面讲的很容易理解 可对应到代码上就容易弄混
用 一个需求对应一下
子页面点击添加后刷新父页面
发布者 子页面
这里定义事件和委托,
当来到触发节点是 通知 所有的订阅者
这里的调用最好不要理解为普通函数的调用执行 而是理解为发布信息给所有订阅者

 刷新列表页数据的委托
        public event EventHandler ReloadList;
  当来到触发节点是 通知  所有的订阅者 

 ReloadList(this, new MyEventArg {
    
     query = PName.Text });
```csharp

订阅者 和订阅
父节点 和 事件执行函数的绑定
父类可以调用子类给子类 的事件附件执行的事件函数
而这要理解为 父类 订阅 子类的事件 父类约定子类事件发生时要做的事
比如 老师约定铃响要上课

在父类内部 

childForm.ReloadList+= fatherFunc
       

事件函数 执行
定义在父类内部 要匹配委托的参数 接受事件参数 并不是一般的方法

 private void LoadDocList(object sender, EventArgs e)
        {
    
    
            List<DocDetail> details;
            MyEventArg myEventArg1 = e as MyEventArg; 
            details = documentBLL.GetProDocDetail(myEventArg1.query);             gridControl1.DataSource = details;
        }

因为订阅者可以有多个 ,有不同的执行方法 所以只要参数符合事件定义的委托 都i可以加在事件里执行

总的来说,对着代码反着理解或许更好

猜你喜欢

转载自blog.csdn.net/qq_43886548/article/details/129128451