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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© redlong 中级黑马   /  2014-4-5 19:13  /  1527 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C#中的委托是什么?事件是不是委托?事件和委托的关系是什么?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

6 个回复

倒序浏览
委托是类型, 而事件是对象. 两者不是同一个东西.
C#中定义的标准事件, 相对于直接使用委托实现的事件, 可以说是一个封装的类型. 只能注册和注销的事件.
回复 使用道具 举报
1.委托可以把一个方法作为参数代入另一个方法;
2.委托可以理解为指向一个函数的指针;
3.委托和事件没有可比性,因为委托是类型,事件是对象;
4.事件的内部是用委托实现的;
5.因为对于事件来讲,外部只能“注册自己+=,注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法;
6.事件只能+=,-=,不能=。
7.事件是用来阉割委托实例的,类比用一个自定义类阉割List;
8.事件只能add,remove自己,不能赋值。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
委托实现了将事件作为参数在方法中进行传递;
事件可以看做是委托类型的变量;
回复 使用道具 举报
这个太难讲了。
介绍两个网址,我学习了后,对于事件和委托有了一些了解,希望对你也有帮助。
http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
http://www.cnblogs.com/JimmyZhang/archive/2008/08/22/1274342.html
回复 使用道具 举报
一片白 发表于 2014-4-7 17:10
这个太难讲了。
介绍两个网址,我学习了后,对于事件和委托有了一些了解,希望对你也有帮助。
http://www.c ...

讲解的不错······
回复 使用道具 举报
//定义委托,委托跟类是同级别的,本质也就是一个类,这个类继承于MultcastDelegate而MultcastDelegate继承于Delegate
        public delegate void DGSayHi(DateTime clickTime);
        //事件  Event
        //        如果所有地方都是用委托,那么有可能发生这种情况:一个委托对象,已经注册了若干方法,但某个程序员不知道,直接将委托 设置为 null,清空了所有的方法。
        //而事件 可以 为我们限制在外部访问某个类里的 委托对象 的方式,只能在外部通过 +=/-=操作委托对象。
        //定义事件(使用委托时,加个event关键字)
        public event DGSayHi dgSayHi;

//1定义方法 其签名必须与 要添加到的委托 的签名一致(就是返回值类型与参数类型及个数)
        public void TestSayHi(DateTime clickTime)
        {
            MessageBox.Show(clickTime.ToString());
        }
        private void btnTest_Click(object sender, EventArgs e)
        {
            //1.创建委托对象,传入 与委托具有相同签名的方法
            DGSayHi dgSayhi = TestSayHi;   // 相当于 DGSayHi dgSayhi = new DGSayHi(TestSayHi);
           //2.调用委托里的方法,并为委托里的方法 传入参数
            dgSayhi(DateTime.Now);        //相当于 dgSayhi.Invoke(DateTime.Now);
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马