.NET委托和事件

liuxiangyu5275 2013-03-07 09:28:52
有大神吗,帮我解释下委托和事件的关系呗,还有什么时候能用上委托和事件。
...全文
308 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xboxeer 2013-03-08
  • 打赏
  • 举报
回复
引用 19 楼 xboxeer 的回复:
把不知道怎么做的事情,经常变化的事情封装起来 交给别人去做 你直接调用别人实现了的就可以 虽然用抽象方法也可以做 但是这就形成了一种局限 也就是这个不会做的类和知道怎么做的类必须是一种继承关系 而委托则取消了这种局限 使得任何关系的类都可以实现这种所谓实现的抽象 其实面向对象 设计模式很重要的一点 就是将变化封装 至于事件 他是一个特殊的委托 特殊在 他的调用只可以是发布这个委托的类 这样就使……
以前写的一个帖子里面的 http://bbs.csdn.net/topics/390088640
xboxeer 2013-03-08
  • 打赏
  • 举报
回复
把不知道怎么做的事情,经常变化的事情封装起来 交给别人去做 你直接调用别人实现了的就可以 虽然用抽象方法也可以做 但是这就形成了一种局限 也就是这个不会做的类和知道怎么做的类必须是一种继承关系 而委托则取消了这种局限 使得任何关系的类都可以实现这种所谓实现的抽象 其实面向对象 设计模式很重要的一点 就是将变化封装 至于事件 他是一个特殊的委托 特殊在 他的调用只可以是发布这个委托的类 这样就使得触发时候的上下文可以保证正确
MR00009 2013-03-08
  • 打赏
  • 举报
回复
委托啊~貌似我只有在使用多线程时会使用到。
q269399361 2013-03-08
  • 打赏
  • 举报
回复
委托就是把一个方法作为参数带入另外一个方法,有点像C++中的,指向函数的引用,事件是一种特殊的委托,要想熟练的使用委托和事件你得弄清楚那个是观察者那个是被观察者
yzf86211861 2013-03-08
  • 打赏
  • 举报
回复
空格键 2013-03-07
  • 打赏
  • 举报
回复
就是用来传递函数的
  • 打赏
  • 举报
回复
是呀,等我过一段时间来写的篇这样的文章。呵呵。
moonwrite 2013-03-07
  • 打赏
  • 举报
回复
google 张仔阳的委托和事件 简单来说就是 MyWantToDoSomething() { //但这里有一些我还是不清楚情况的 //比如我实现了点击一个按钮就会干些事情,但这些事情我还不知道要干什么 //于是我就申明一个事件 比如点击了按钮OnClick } 别人就可以注册监听这个事件 然后补充要实现的逻辑 下面这个你应该很熟悉吧 <asp:Button ID="btnSubmit" Text="提交" onclick="btnSubmit_Click" /> 微软在做这个按钮的时候 肯定不知道我们想要点击按钮后要实现什么功能 所以就使用了onclick事件 然后我们可以用btnSubmit_Click来监听它 自己实现逻辑 btnSubmit_Click(可以自己命名)但要符合函数签名 委托是一种类型,定义了函数的签名 void btnSubmit_Click(object sender, EventArgs e) AAA void AAA(object sender, EventArgs e) AAA void AAA(int sender, EventArgs e)//签名不一致,
迪迦凹凸曼 2013-03-07
  • 打赏
  • 举报
回复
C#中事件的一般用法

FCL中的定义
public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e) where TEventArgs:EventArgs
...
所以方法原型必须是viod Method(object sender,TEventArgs e)
事件的定义:
public event EventHandler<TEventArgs > OnXXXX;
从而可以看出事件是建立在委托的基础上。。
一般是发布-订阅模式
通过触发OnXXXX来回调订阅者的Method
我是小李 2013-03-07
  • 打赏
  • 举报
回复
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。 事件是委托的一种。 这个帖子很不错:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html
Scorip 2013-03-07
  • 打赏
  • 举报
回复
引用 8 楼 Scorip 的回复:
个人理解: C# 是一种强类型的语言,既然是强类型,那么所有的对象都应该有类型。既然这样,那么方法属于什么类型呢?其实 委托 就是方法的类型。 C# code?123456789//定义语法//访问修饰符 delegate 返回类型 委托名 (参数列表) //返回类型 和 参数列表称为[签名]//[public/protected/private] deleg……
以上纯属个人观点,不喜勿喷!
Scorip 2013-03-07
  • 打赏
  • 举报
回复
个人理解: C# 是一种强类型的语言,既然是强类型,那么所有的对象都应该有类型。既然这样,那么方法属于什么类型呢?其实 委托 就是方法的类型。

//定义语法
//访问修饰符 delegate 返回类型 委托名 (参数列表)   //返回类型 和 参数列表称为[签名]
//[public/protected/private] delegate returnType delegateName(paramtype param1,…)
//
//委托可以分配多个方法,但只能分配[签名]相同的方法,分配多个方法的委托可以叫多路广播
/*
//MSDN中的解释
//委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调
*/


而方法,则是一种特殊的委托,比如说我点击 Button 的时候,程序本身不知道该如何处理这个 Click,于是就给它动态注册了一个方法,并把这个方法分配给了 这个 Click 事件,(你可以右键进去看 Click 事件,是一个 关键字为 event 的委托,而那个注册的方法则是分配给了这个事件)。 额,,好吧,希望没晕。。这个刚开始理解起来貌似是有点见鬼!~
leichentao094 2013-03-07
  • 打赏
  • 举报
回复
委托是对函数的封装,可以当做给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义事情时,事件对象处理通知过程。 注意:委托是一种饮用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托对象用关键字delegate来声明。而事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知他们。事件对象用event关键字声明。
残月照我心 2013-03-07
  • 打赏
  • 举报
回复
好比现实生活中的我交给你一件事去办这个例子。 首先我需要定义出来这个事到底是干嘛?也就是事件的描述,这个描述在代码中是通过委托方式表现的。(比如我要你去叫某个人) delegate void CallSthBodyDelegate(string personName); 上面这个就是这个事件的契约,也是我和你沟通的方式,你在做相关事情的时候必须要符合这个契约。
残月照我心 2013-03-07
  • 打赏
  • 举报
回复
事件是封装为属性的委托
残月照我心 2013-03-07
  • 打赏
  • 举报
回复
委托就是平时写的方法,加个delegate 事件跟委托的关系就仿佛属性和字段的关系
Kilin_Zhang 2013-03-07
  • 打赏
  • 举报
回复
事件也是委托
残月照我心 2013-03-07
  • 打赏
  • 举报
回复
引用 楼主 liuxiangyu5275 的回复:
有大神吗,帮我解释下委托和事件的关系呗,还有什么时候能用上委托和事件。
http://baike.baidu.com/view/1935199.htm 你可以看下这个 很不错
insus 2013-03-07
  • 打赏
  • 举报
回复
参考的delegate and event例子: http://www.cnblogs.com/insus/tag/delegate/

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧