您的位置:首页 > 编程语言 > C#

C#中的委托与事件

2014-12-24 09:43 239 查看

1,委托?

通俗来讲,就是一个能存放符合某种格式(签名)的方法的指针 的容器 (可以将方法作为一个参数来传递到另一个方法内执行)

定义委托:delegate string DelegateSayHi(string uName);

创建委托对象: DelegateSayHi dg=new DelegateSayHi (与委托有相同前面的方法);

委托的存在目的 就是为了一次性调用所有的方法

委托对象追加方法:dg+=fun1

委托对象删除方法:dg-=fun1;

执行委托:dg("name"); 等同于 dg.invork("name");

委托必须要存在一个方法

委托的使用:

1.0 委托作为参数

public delegate string DGTest(string name);

string ShowSmile(string name, DGTest dgt)
{
return dgt(name);
}
private void button1_Click(object sender, EventArgs e)
{
string returnMess = ShowSmile("小白", Test2);
MessageBox.Show(returnMess);
}

string Test1(string name)  { return "哈哈 " + name; }
string Test2(string name) { return "嘻嘻 " + name; }
string Test3(string name) { return "呵呵 " + name;  }


2.0 委托作为返回值

public delegate string DGTest(string name);
private void button2_Click(object sender, EventArgs e)
{
DGTest dgt = ShowSmile(3);
string mess = dgt("小小小米");
MessageBox.Show(mess);
}

DGTest ShowSmile(int i)
{
switch (i)
{
case 1: return Test1;
case 2: return Test2;
default: return Test3;
}
}


事件
由于委托有如下缺点
1.可以将Null赋予 委托会导致当前委托容器被清空
2.可以直接将某个方法赋值给委托
为了防止将委托对象清空,所以微软引入了事件

事件特点:事件只能出现在+=和-=的坐标位置,意味着不能对事件进行任何赋值操作,就保护了委托中已经存在的方法

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

1,委托可以把一个方法作为参数代入另一个方法。

2,委托可以理解为指向一个函数的指针。

3,委托和事件没有可比性,因为委托是类型,事件是对象。

下面说的是委托的对象(用委托方式实现的事件)和(标准的 event 方式实现)事件的区别。

事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用 Delegate 就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割 List。事件只能 add、remove 自己,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个 private的委托和 add、remove 两个方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: