C#中的event作用在哪里啊?

delegatevoidd();delegateeventvoidd();二者区别在哪里啊,加了event后类型d有什么作用啊?学c#不久请指教。... delegate void d();
delegate event void d();
二者区别在哪里啊,加了event后类型d有什么作用啊?学c#不久请指教。
展开
 我来答
许诗文00
推荐于2016-09-04 · TA获得超过4290个赞
知道小有建树答主
回答量:425
采纳率:100%
帮助的人:26.3万
展开全部
C#用户可能会发现,event关键字有时候可有可无
[c-sharp] view plaincopyprint?
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
MyClass1 obj = new MyClass1();
obj.AEvent += new EventHandler(MyEventHandler);
//obj.AEvent();

obj.FireEvent();
obj.AEvent -= new EventHandler(MyEventHandler);
obj.FireEvent();
}
public static int MyEventHandler()
{
Console.WriteLine("Event");
return 0;
}

}
public delegate int EventHandler();
class MyClass1
{
public /*event*/ EventHandler AEvent;
public void FireEvent()
{
if (AEvent != null)
{
AEvent();
}
}
}

}
namespace ConsoleApplication3
{

class Program

{

static void Main(string[] args)

{

MyClass1 obj = new MyClass1();

obj.AEvent += new EventHandler(MyEventHandler);
//obj.AEvent();

obj.FireEvent();

obj.AEvent -= new EventHandler(MyEventHandler);

obj.FireEvent();

}

public static int MyEventHandler()

{

Console.WriteLine("Event");

return 0;

}

}

public delegate int EventHandler();

class MyClass1
{

public /*event*/ EventHandler AEvent;

public void FireEvent()
{

if (AEvent != null)
{

AEvent();

}

}

}
}
如上源码,event关键字有无的效果一样。那么event关键字的作用到底是什么呢?就是那句obj.AEvent()。如果使用了关键字event,那么这句在编译时将报错,而如果没有使用关键字event,则编译正常。event关键字,限定了外界对委托变量只能使用+=或-=操作符,对于其他的比如赋值或者调用都会被视为错误。另外,据说event关键字限定的委托最好是返回值为void的类型。
怒火08
2012-10-02
知道答主
回答量:5
采纳率:0%
帮助的人:7511
展开全部
二楼讲的十分正确。
而具体的代理、事件的使用,楼主应该编程实践下。
代理在跨线程调用中用的较多,相当于函数的指针。
事件更多的用在这样一种情况下:程序某一地方触发事件,但是不做具体的事情。而注册了事件的地方能够立刻感应到事件的发生,从而进行相应的操作。
两者十分好用,建议楼主多搜一些详细的文章阅读。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
theprogrammer
2012-09-30 · TA获得超过1650个赞
知道小有建树答主
回答量:1127
采纳率:0%
帮助的人:470万
展开全部
public delegate void ChangedEventHandler(object sender, EventArgs e);
public event ChangedEventHandler Changed;

上面是比较标准的delegate 和event的用法。
首先,delegate event void d() 不是正确的声明。
delegate void d() 是可以的,声明一种delegate 类型 d。
后面可以有 event d whatever;
追问
哦,写错了,那你能说明下有了event后e相对于d来说有什么作用和不同吗?   

delegate void d();
d d1;
event d e;//就是说直接把这个注释掉后面所有的e都用d1会有什么情况啊?
追答
通俗来讲,
delegate 声明了一个“类”
event d e; 是声明了一个d“类”的'变量“ e;
后面你可以引用 e。

注意这里的”类“ 和”变量“都是带引号的,只是类别,

你的声明就是确保在程序的某个地方,有人可以订阅e,有些地方可以触发e。

其实,退一步讲,你追究这些东西意义不大,理解event的用途比理解为什么这么声明更有意义。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张连_宇
2012-09-30
知道答主
回答量:15
采纳率:0%
帮助的人:4.5万
展开全部
event 是声明事件的,是事件的实现原理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式