在属性中定义事件,请大家说说这样做的好处。

Johnny_de 2005-10-13 05:39:32
我定义两个事件代码如下:
private event StateEventHandler onStateChanged;

public event StateEventHandler OnStateChanged
{
add
{
onStateChanged += value;
}
remove
{
onStateChanged -= value;
}
}

一般我们这样定义:
public event StateEventHandler OnStateChanged += new StateEventHandler(事件处理程序)
这样有什么区别啊?
我现在知道这样可以在一个类中管理该事件,大家讨论一下。
...全文
187 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
那就触发相同的事件好了,有什么关系呢。
真相重于对错 2005-10-14
  • 打赏
  • 举报
回复
其中每个接口都有一个同名事件
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
谢谢楼上那位大哥,那你可不可以解释下为什么实现两个接口时候一定要用事件属性?我觉得也不一定要那样做啊。
真相重于对错 2005-10-14
  • 打赏
  • 举报
回复
事件属性的另一个用途涵盖了实现两个接口的情形,其中每个接口都有一个同名事件。在这种情况下,必须使用显式实现事件属性:

// event_keyword3.cs
using System;

public delegate void MyDelegate1();

public interface I1
{
event MyDelegate1 MyEvent;
}

public delegate int MyDelegate2(string s);

public interface I2
{
event MyDelegate2 MyEvent;
}

public class ExplicitEventsSample: I1, I2
{
public event MyDelegate1 MyEvent; // normal implementation of I1.MyEvent.

event MyDelegate2 I2.MyEvent // explicit implementation of I2.MyEvent
{
add
{
MyEvent2Storage += value;
}
remove
{
MyEvent2Storage -= value;
}
}

JadyWang 2005-10-14
  • 打赏
  • 举报
回复
F.Y.I
如果您的类引发多个事件,并且您按引发事件中的说明对这些事件进行编程,编译器将为每个事件委托实例生成一个字段。如果事件的数目很大,则一个委托一个字段的存储成本可能无法接受。对于这些情况,.NET Framework 提供了一个称为事件属性的构造,此构造可以和(您选择的)另一个数据结构一起使用,用来存储事件委托。

事件属性由带有事件访问器的事件声明组成,如下面的示例所示。事件访问器是您定义的方法,用以允许事件委托实例添加到存储数据结构或从存储数据结构移除。请注意,事件属性要比事件字段慢,这是因为每个事件委托在被调用之前都要被检索。这是内存和速度之间的折中方案。如果您的类定义了许多不常引发的事件,那么您可能要实现事件属性。Windows 窗体控件和 ASP.NET 服务器控件使用事件属性而不是事件字段。

Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
我指的是事件属性。
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
msdn哪里说到了,可以告诉我吗?
cjzlxy 2005-10-14
  • 打赏
  • 举报
回复
哦没见过..
你写的是属性吗?
真相重于对错 2005-10-14
  • 打赏
  • 举报
回复
确实有,没用过
不过用途msdn帮助里不说的清清楚楚地吗,还有什么不明白
真相重于对错 2005-10-14
  • 打赏
  • 举报
回复
c#2.0???
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
确实没有错误,完全正确,你们没遇到过事件属性?
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
hdt,帮忙给我解决完问题吧,谢谢.
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
MyEvent += new MyDelegate1(function);
MyEvent += new MyDelegate2(function);
这样不行吗?
真相重于对错 2005-10-14
  • 打赏
  • 举报
回复
是可以触发同一,但怎么制定呢
Johnny_de 2005-10-14
  • 打赏
  • 举报
回复
触发事件注册的程序啊。我认为就像CLICH事件一样,可以有很多BUTTON去触发同一事件,但是可以调用相同的事件处理程序。
真相重于对错 2005-10-14
  • 打赏
  • 举报
回复
触发那一个????
h_lj 2005-10-13
  • 打赏
  • 举报
回复
是啊,怎么可能这么写,属性只有get和set方法
zhy0101 2005-10-13
  • 打赏
  • 举报
回复
写的没看懂
真相重于对错 2005-10-13
  • 打赏
  • 举报
回复
语法错误
hzw66 2005-10-13
  • 打赏
  • 举报
回复
定义了事件属性可以使事件更灵活,可以在添加、删除事件时做更多操作

110,536

社区成员

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

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

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