事件有发送者和接收方。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。 在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。(浅显的说:例如,我要吃饭,事件的发送者是我,但我并不知道谁将做饭给我吃,是妻子呢,还是老妈呢,还是老爸呢等等。所以引出了委托,就是这个事件交给谁做。
委托好比一个指挥官,指向妻子,妻子做,指向老妈,老妈做)
Public delegate [返回值] delegatename(委托的名字)(参数列表……..)
Public event DelegateName(自定义的一个委托) MyClick;
事件是一种特殊的委托,因为事件是对委托的封装,就像字段被封装成属性,因为对于事件来讲内部永远是private的,外部只能“注册自己+=、注销自己-=”,在本类是可以用=的(赋值一个方法),外界不可以注销其他的注册者,外界不可以主动触发事件,从而起到封装的作用;而委托时可以=的,即赋值,这样委托就重新new了之前+=或者赋值的都不存在了,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能=、不能外部触发事件。所以简单来说事件就是对委托的封装,防止外部类对其进行赋值;
namespace DelegateAndEvent
{
public delegate void GreetingDelegae(string name);
public class Manager
{
public GreetingDelegae delegate1;
public event GreetingDelegae event1;
public void Greeting(string name)
{
if (delegate1 != null)
delegate1(name);
if (event1 != null)
event1(name);
event1 = Test;//在定义事件的本类中时可以赋值的
}
public void Test(string name)
{
}
}
}
namespace DelegateAndEvent
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Manager m = new Manager();
m.delegate1 = English;//委托的话可以用=号,即赋值
m.delegate1 += Chinese;
m.delegate1 = Chinese;//如果是再加这句那么之前加的就都没有了,因为委托时public的,外部可以更改的,这是为什么要有event
//因为event外部只能+=和-=,不能赋值,只有内部才可以赋值,这样就保护了该事件成员在外部不会被new了
m.event1 += new GreetingDelegae(English);//不能=的,会出错
m.event1 += new GreetingDelegae(Chinese);
}
public void English(string name)
{
MessageBox.Show("hello," + name);
}
public void Chinese(string name)
{
MessageBox.Show("你好," + name);
}
}
}
分享到:
相关推荐
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件。对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件...
展示了委托和事件的用法,一节委托和事件的区别!!!!!
委托和事件这两个概念是完全配合的。委托可以看成是函数指针,那就是说,它能够引用对象方法,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个对象方法,将其作为它构造函数的参数。
详解C#委托,事件与回调函数
本DOC,主要的是在C#中的事件,委托的区别的特别详细的描述。
学习C#毕竟之路,对事件编程,入门级介绍,全面而且细致
委托与事件讲解ppt,可以让从0开始学C#的人了解委托与事件的区别和联系
通过分别写委托、事件的代码,明确展示这两种方法的窗体传值的共同点与区别,适合初学者上手练习~
当第一次听到委托、事件时感觉比较抽象、很好奇,当看到老师在课堂上利用委托和事件实现两个窗体调用时、感觉委托太神奇了,呵、不废话了…… C#委托和事件在做程序是很常见到的,对于像我这样的接触C#不是很长的...
主要介绍了C#中委托和事件的区别,并分别以实例形式展示了通过委托执行方法与通过事件执行方法,以及相关的执行流程与原理分析,需要的朋友可以参考下
事件与委托似乎很难以理解,这是因为它们的使用方式与常用的编码有很大的差别,例如通常编写的都是同步代码,调用一个类型的方法,会即刻出现方法执行的结果,这是符合逻辑的。但在某些情况中,同步代码未必满足需求...
1)事件对象:当浏览器执行事件的时候,会将所有与事件相关的内容(鼠标位置,触发的目标等)封装为一个对象,并且在触发事件的函数,在事件函数中进行传递 Event 常见属性: clientX clinetY 鼠标相对客户端的位置 ...
一.on(‘clcik’)与$(”).clcik()方法的区别: on(‘clcik’):事件委托机制 // 在body元素上绑定click事件处理函数handler,如果这个click事件是由其后代的P元素触发的,就执行handler $(document.body).on(“click...
事件冒泡也是委托事件的原型,事件委托就是子类的事情委托给父类的去做 最直观的区别就是on绑定比bind绑定多一个参数‘childSelector’ 语法 $(selector).on(event,childSelector,data,function) 参数 描述 ...
DOM事件的区别
委托是C#区别于其他语言的一个特色,用它我们能写出简洁优雅的代码、能很方便的实现对象间的交互。 初学者可能会觉得委托体系很复杂:lambda表达式、语句lambda、匿名方法、委托、事件,光名词一堆。其实这些...
事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的...
js常见面试题汇总 1.js的数据类型 2.双等和三等的区别 3.js中布尔值为false的六种情况 ...20.事件委托的理解 21.call、apply、bind的区别 22.js闭包 23.内存泄漏怎么理解 24.哪些操作会造成内存泄露
通俗的来讲,委托除了必须指定delegate关键字和没有方法实体之外,和指定方法没有更多区别。你可以当它是一个占位符,比如你在写代码的时候并不知道你将要处理的是什么。你只需要知道你将要引入的参数类型和输出类型...