C#中的event作用在哪里啊?
delegatevoidd();delegateeventvoidd();二者区别在哪里啊,加了event后类型d有什么作用啊?学c#不久请指教。...
delegate void d();
delegate event void d();
二者区别在哪里啊,加了event后类型d有什么作用啊?学c#不久请指教。 展开
delegate event void d();
二者区别在哪里啊,加了event后类型d有什么作用啊?学c#不久请指教。 展开
4个回答
展开全部
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的类型。
[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的类型。
展开全部
二楼讲的十分正确。
而具体的代理、事件的使用,楼主应该编程实践下。
代理在跨线程调用中用的较多,相当于函数的指针。
事件更多的用在这样一种情况下:程序某一地方触发事件,但是不做具体的事情。而注册了事件的地方能够立刻感应到事件的发生,从而进行相应的操作。
两者十分好用,建议楼主多搜一些详细的文章阅读。
而具体的代理、事件的使用,楼主应该编程实践下。
代理在跨线程调用中用的较多,相当于函数的指针。
事件更多的用在这样一种情况下:程序某一地方触发事件,但是不做具体的事情。而注册了事件的地方能够立刻感应到事件的发生,从而进行相应的操作。
两者十分好用,建议楼主多搜一些详细的文章阅读。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
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的用途比理解为什么这么声明更有意义。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
event 是声明事件的,是事件的实现原理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询