c#中使用事件有什么好处

大家先看两段代码:使用event代码:namespaceConsoleApplication5{publicdelegatevoidgrant(stringn,strin... 大家先看两段代码:
使用event代码:
namespace ConsoleApplication5
{
public delegate void grant(string n,string s);
class people
{
public event grant g;
public void granten(string n, string s)
{
Console.Write("my name is {0},{1}", n, s);
Console.Read();
}
public void grantch(string n, string s)
{
Console.Write("我的名字叫做 {0},{1}", n, s);
Console.Read();
}
public void grants(string n, string s)
{
if (g != null)
{
g(n, s);
}

}
}
class Program
{

static void Main(string[] args)
{
people p = new people();
p.g +=p.granten ;
p.g +=p.grantch ;
p.grants("ysy", "welcome to see you!");
Console.Read();
}
}
}

不使用event的代码
namespace ConsoleApplication5
{
public delegate void grant(string n,string s);
class people
{
public grant g;
public void granten(string n, string s)
{
Console.Write("my name is {0},{1}", n, s);
Console.Read();
}
public void grantch(string n, string s)
{
Console.Write("我的名字叫做 {0},{1}", n, s);
Console.Read();
}
public void grants(string n, string s)
{
if (g != null)
{
g(n, s);
}

}
}
class Program
{

static void Main(string[] args)
{
people p = new people();
p.g =p.granten ;
p.g +=p.grantch ;
p.grants("ysy", "welcome to see you!");
Console.Read();
}
}
}

这两段代码的效果,至少看起来是完全相同的,那么,为什么要使用event了?
event到底有什么好处了?
三楼大哥,不懂啊。。。
委托我倒是会,但是搞不清楚这个事件有什么用处
展开
 我来答
陈学阳
推荐于2018-04-10 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2.1万
采纳率:14%
帮助的人:5541万
展开全部
事件其实就是一个特殊的委托,对事件的声名其实就是声明一个私有的委托变量
你先把什么是委托搞清楚,就知道委托和事件的关系了
举个例子
public void EnglishGreeting(string name)
{
Console.WriteLine("Morning, "+ name);
}
public void ChineseGreeting(string name)
{
Console.WriteLine("早上好, "
+ name);
}

public enum Language
{
English, Chinese
}
public void GreetPeople(string name, Language lang)
{
//做某些额外的事情,比如初始化之类,此处略
switch (lang)
{
case Language.English:
EnglishGreeting(name);
break;
case Language.Chinese:
ChineseGreeting(name);
break
; }

这个语句当我们传入姓名name的参数,比如说"jack" 进去的时候将调用
EnglishGreeting方法,相反传name为“杰克"将调用ChineseGreeting方法
很显然这个语句的扩展性很差 ,如果再添加其他语言版的,那就得反复的去修改GreetPeople()方法,这个非常不方便
委托就可以解决上面的问题
public delegate void GreetingDelegate(string name);
在这里定义了委托,它代表方法的类型,这里代表EnglishGreeting和ChineseGreeting方法

static void Main(string[] args)
{
GreetingDelegate delegate1;
delegate1 = EnglishGreeting; // 先给委托类型的变量赋值
delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法
// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法
GreetPeople("Jimmy Zhang", delegate1);
Console.ReadKey();
}
也就是说此时委托代表EnglishGreeting 和ChineseGreeting 方法类,想当于他们的摸板(不知道楼主懂这句话不?)然后将这2个方法绑到此委托变量中,调用此变量的时候将依次执行上面的2个方法
这里输出结果为
Morning, Jimmy Zhang
早上好, Jimmy Zhang

早上好, 张子阳

到这里楼主明白了,委托的好处了吗??

事件顾名思义,就是发生的事情,一个事件中包含一些方法。那些方法都串联起来发生的的,即然如此肯定就和委托有关系,委托也是包含了一些方法,
先面看看看事件的声明方式
public event GreetingDelegate MakeGreet;
是吧?声明一个事件不过类似于声明一个委托类型的变量而已。
MakeGreet = EnglishGreeting;
MakeGreet += ChineseGreeting;
一样也是绑定方法,和委托一样
现在你应该明白为什么一个事件需要一个委托了把
事件其实就是委托,
不知道说了这多你明白了没
汗。。了

PS:事件和委托的关系是有点纠结,对于新手来说,过了这个坎儿,你就会觉得这个很简单,今天下午没事,花点时间举个例子来解答一下,不知道你明白了没
rightmin
2010-09-12 · TA获得超过4124个赞
知道大有可为答主
回答量:2199
采纳率:0%
帮助的人:1792万
展开全部
加了event后的委托被认为是个事件,当你使用事件的时候,输入+=后,系统会提示你按tab键完成事件处理方法的添加!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b54faf0
2012-08-15 · TA获得超过187个赞
知道答主
回答量:11
采纳率:0%
帮助的人:4.9万
展开全部
我感觉。其实委托和事件其实是差不多的东西。至于为什么要用。
我觉得主要的好处就是指针的好处了。
但是委托是规范的事件。
委托其实就是告诉你一个规范,按照一个规范的方法都可以被使用,而不是写死的某一个方法。所以委托允许+=和-=。这个是非常有优势的。因为我可以无视前面人员添加的触发事件,专心于现在添加的事件。当然之前添加的事件,就由添加的人来-=了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
重典技术闲话
2010-09-12 · TA获得超过2173个赞
知道大有可为答主
回答量:2593
采纳率:0%
帮助的人:1145万
展开全部
代码永远不会只是一个人写的

假设有人用你写的people
但是你的代码已经发布,不能更改

那么事件就是提供给它一种可以自定义实现的好方法

这就是好处
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式