c# 委托 和 事件 自学理解

production1986 2011-08-27 07:16:52
用了这么久,到今天才横下心来总结给大家,因为自己也才算明白了一二,贡献给和我一样的新手.

委托: 概念,简单点,有人会说书上也会说 像c++的指针,尼玛建议不要有这个概念容易让你绕路去理解它,所以我也没有自己
概括也不知道怎么概括.那就不概括,就把他当做是一个很实在的东西.关键词 delegate

事件: 尼玛,真不想多说什么.只要你是程序员或者大二大三的学弟学妹,要不不知道我也无语 关键词 event

委托事件: 就是 委托 事件 哈哈自己理解

下面讲重点.

第一步: 定义委托 public delegate void mydelegate ( 参数);
第二步: 定义委托事件 public event mydelegate myevent
第三步:定义事件处理程序可以是多个 public void funone(参数)
public void funtow(参数)
public void funthree(参数)
第四部: 核心(同过委托事件把事件处理程序 弄给事件)
myevnt += mydelegate(funone)
myevnt += mydelegate(funtwo) 以此类推
第五步:促发事件
myevent(参数),这样就会促发事件的处理程序有多少促发多少
一般会把 这个封装成一个 促发事件

基本结束 应该很明了 如果还不懂不用担心,我就知道世界上有比我还笨的人哈哈
看下面

如果用VS开发过程序的看下面c#

1 public delegate void EventHandler(object sender, EventArgs e)
2 public event EventHandler SelectedIndexChanged;
3 DropDownList1_SelectedIndexChanged(object sender, EventArgs e)(自定义的处理程序)
4 SelectedIndexChanged += EventHandler(DropDownList1_SelectedIndexChanged)
5 当你在界面上操作 DropDownList控件的时候 当值改变促发 SelectedIndexChanged

好了就这么多,如果到这里还不能理解 委托事件的话我也无语了
...全文
169 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
小D2013 2011-08-30
  • 打赏
  • 举报
回复
有了委托可以使你能够像传递参数一样传递方法,为什么要使用委托、事件,例如 一个Button,当你双击它时,会自动产生一个方法,你可以在这个方法里写自己的代码,当单击按钮时,就会调用这个方法,在这里微软开发这个button时,并不知道用户需要这个button在单击时执行什么,a程序员可能会执行开灯的方法,b可能会执行吃饭的方法,因此微软通过事件这种形式为程序员提供了这种可能,
康少_小贱 2011-08-29
  • 打赏
  • 举报
回复
第四部: 核心(同过委托事件把事件处理程序 弄给事件)
myevnt += mydelegate(funone)
myevnt += mydelegate(funtwo) 以此类推


貌似叫注册事件
qcxabc 2011-08-29
  • 打赏
  • 举报
回复
学习了。
renyiqiu 2011-08-27
  • 打赏
  • 举报
回复
学习学习
threenewbee 2011-08-27
  • 打赏
  • 举报
回复
现在 .NET 为你提供了简单的语法,对比下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction);
delegateobject.Invoke("Hello World!");
}
}

delegate void DelegateClass(string Param);

class TargetClass
{
public void TargetFunction(string Param)
{
Console.WriteLine(Param);
}
}
}
threenewbee 2011-08-27
  • 打赏
  • 举报
回复
好,简单和你说说什么叫委托。

委托的意思就是“委托”。一个负责调用另一个类的方法的对象,我们通过调用它,委托它来调用真正的目标。

为了阐释什么是委托,我们不用委托,用对象来模拟:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DelegateClass delegateobject = new DelegateClass(new TargetClass());
delegateobject.Invoke("Hello World!");
}
}

class DelegateClass
{
private TargetClass _obj;
public DelegateClass(TargetClass obj) { _obj = obj; }
public void Invoke(string Param)
{
_obj.TargetFunction(Param);
}
}

class TargetClass
{
public void TargetFunction(string Param)
{
Console.WriteLine(Param);
}
}
}
xiongxyt2 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 production1986 的回复:]
用了这么久,到今天才横下心来总结给大家,因为自己也才算明白了一二,贡献给和我一样的新手.

委托: 概念,简单点,有人会说书上也会说 像c++的指针,尼玛建议不要有这个概念容易让你绕路去理解它,所以我也没有自己
概括也不知道怎么概括.那就不概括,就把他当做是一个很实在的东西.关键词 delegate

事件: 尼玛,真不想多说什么.只要你是程序员或者大二大三的学弟学妹,要不不知道我也……
[/Quote]
给新手总结的不错,不过你忘了一句很重要的。。。。。。。。。
方法funone的签名必须与委托一模一样,也就是说方法的返回值类型和参数个数、类型必须与委托一样
TNight 2011-08-27
  • 打赏
  • 举报
回复
不错,感谢LZ
beijingNYL 2011-08-27
  • 打赏
  • 举报
回复
写代码做个Demo,能出来,能成功。 才算是初步理解了!
beijingNYL 2011-08-27
  • 打赏
  • 举报
回复
人才啊,真是梦里寻他千百度!相见恨晚! 最好我只能说一句:好,很好,非常好!
Icedmilk 2011-08-27
  • 打赏
  • 举报
回复
楼主净总结写表面的形式的东西,没有深入啊

会用,但是不知道是怎么回事
Icedmilk 2011-08-27
  • 打赏
  • 举报
回复
我说说我的理解:
delegate关键词背后的东西
delegate void TestDelegate();这句话定义了一个委托,确切的说是一个类型(Type)
这个类型是编译器帮你从Delegate这个.Net类库里的类继承出来的
以下代码可以获得的输出:
            TestDelegate d=new Program.TestDelegate(Work);
Console.WriteLine(d.GetType());
Console.WriteLine(d.GetType().BaseType);
Console.WriteLine(d.GetType().BaseType.BaseType);

TestCSharp.Program+TestDelegate
System.MulticastDelegate
System.Delegate

event关键词的背后:
事件其实就是一种特殊的属性,类型是委托类型,event关键词的作用在于隐藏委托类型的方法,使其变得简单,event修饰的委托只有+= -+这两种操作是被暴露的

IT回忆录 2011-08-27
  • 打赏
  • 举报
回复
切,卖弄
happytonice 2011-08-27
  • 打赏
  • 举报
回复
总结的不错
chuanzhang5687 2011-08-27
  • 打赏
  • 举报
回复
我承认我比你笨!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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