A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飞、 中级黑马   /  2013-10-14 15:27  /  2595 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 飞、 于 2013-10-14 22:05 编辑

有师兄说事件是由委托完成的,求详细解释

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1 很给力!

查看全部评分

12 个回复

倒序浏览
1. 对于事件来讲,外部只能“注册自己+=,注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件。
2.  因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法;
3. 事件是用来阉割委托实例的,类比用一个定义类阉割List。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报 1 0
在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。 所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。 .NET Framework 定义了一个特殊的类型 ( Delegate),该类型提供函数指针的功能。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
线程中要用到委托,委托是什么
委托可以把一个方法作为参数代入另一个方法.
委托可以理解为指向一个函数的引用.
回复 使用道具 举报 1 0
如果已经解决问题请及时把分类设为已解决!黑马有你更精彩!
回复 使用道具 举报
因为委托可以把方法当做一个参数使用!

一个委托的列子,
delegate void EatDelegate(string food )
class MyDelegate
{
static void zsEat (string food )
Console.WriteLine("张三"+food);
}
static void Main()
{
EatDelegate zs=new EatDelegate (zsEat);
zs("西瓜")
}

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
看看这个吧
委托(delegate)
委托可以理解成为函数指针,不同的是委托是面向对象,而且是类型安全的
事件(event)
  我们可以把事件编程简单地分成两个部分:事件发生的类和事件接收处理的类。事件发生的类就是说在这个类中触发了一个事件,但这个类并不知道哪个个对象或方法将会加收到并处理它触发的事件。所需要的是在发送方和接收方之间存在一个媒介。这个媒介在.NET Framework中就是委托(delegate)。在事件接收处理的类中,我们需要有一个处理事件的方法。
完整的你可以看看下面的
http://www.cnblogs.com/michaelxu/archive/2008/04/02/1134217.html

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
     委托其实也是一种与class、interface等类似的数据类型。委托就是对被委托函数的一次封装,它可以实例化,它是通过delegate关键字进行声明的,从此可以看出委托是面向对象的。
      
        事件就是当对象发生某些事情时,向该对象的客户提供通知的一种方法。因此它是一种特殊类型的委托。意思是指可以将多个事件处理函数委托交由一个事件进行托管,即当事件引发时,会调用其中的每一个委托函数。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
如果你学过windows的消息机制,就知道所谓的事件委托就是“回调函数”,简单点说吧,一个事件发生之后,对这个事件的响应代码不是系统内置的,而是交给用户来编写,这其实是两个程序(windows和我们的程序)之间在传递信息,于是一个指向用户编写的处理函数的指针被传进处理消息的API,windows对于我们编写的例程一无所知,只知道有一个指针,这种机制可以最大限度的保证不同模块,不同进程之间的封闭性
在C#中,消息变成了事件,指向函数的指针变成了“委托”,但底层的原理,却不会改变。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
委托:将方法作为变量使用的机制(结构丰富的函数指针)
1.声明委托类型
public delegate 返回值类型 委托名(参数列表);
2.委托用来指定方法,那么在格式中就需要满足方法的约束
public delegate void FuncDelegate();
public delegate int FuncDelegate(string str);
3.准备方法
public void Func() {...}
4.声明委托变量(声明FuncDelegate委托类型的变量)
FuncDelegate MyFunc;
系统一般使用Handler结尾
5.赋值,将方法名赋值给委托类型的变量
MyFunc = Func;
6.将MyFunc当做方法用即可,同时他又是变量,可以进行传递
MyFunc();

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
硬别 中级黑马 2013-10-14 20:48:29
11#
在发生其他类或者对象需要关注的事情时,本类或者对象可以通过事件来通知他们。发送事件的类称为事件的发送者,而接收事件的类称为事件的订阅户。事件需要订阅者,当事件发生时,订阅者会给出相应的事件处理程序。事件处理程序本身是简单的函数形式,它参与和返回类型必须和调用它的委托相匹配。委托在这里的作用是包含事件处理程序,当事件被触发,通过委托来执行事件处理程序。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
如果已经解决问题请及时把分类设为已解决!黑马有你更精彩!
回复 使用道具 举报

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马