相关疑难解决方法(0)

事件Action <> vs event EventHandler <>

声明event Action<>和声明之间有什么不同吗event EventHandler<>

假设实际引发事件的对象无关紧要.

例如:

public event Action<bool, int, Blah> DiagnosticsEvent;
Run Code Online (Sandbox Code Playgroud)

VS

public event EventHandler<DiagnosticsArgs> DiagnosticsEvent;

class DiagnosticsArgs : EventArgs
{
    public DiagnosticsArgs(bool b, int i, Blah bl)
    {...}
    ...
}
Run Code Online (Sandbox Code Playgroud)

两种情况下的使用情况几乎相同:

obj.DiagnosticsEvent += HandleDiagnosticsEvent;
Run Code Online (Sandbox Code Playgroud)

关于event EventHandler<>模式,有几件我不喜欢的事情:

  • 从EventArgs派生的额外类型声明
  • 强制传递对象来源 - 通常无人问津

更多代码意味着维护更多代码而没有任何明显的优势.

结果,我更喜欢 event Action<>

但是,只有在Action <>中有太多类型参数时,才需要额外的类.

c#

132
推荐指数
7
解决办法
9万
查看次数

如何取消订阅C#中特定类的事件的所有处理程序?

基本前提:

我有一个房间,当一个阿凡达"进入"房间内的所有头像时,它会发布一个事件.当阿凡达离开房间时,我希望它删除该房间的所有订阅.

在将"阿凡达"添加到新房间并订阅新房间的活动之前,我怎样才能最好地取消订阅房间中所有活动的阿凡达?

代码如下:

class Room
{
   public event EventHandler<EnterRoomEventArgs> AvatarEntersRoom;
   public event EvnetHandler<LeaveRoomEventArgs> AvatarLeavesRoom;
   public event EventHandler<AnotherOfManyEventArgs> AnotherOfManayAvatarEvents;


   public void AddPlayer(Avatar theAvatar)
   {
      AvatarEntersRoom(this, new EnterRoomEventArgs()); 

      AvatarEntersRoom += new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);

      AvatarLeavesRoom += new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);

      AnotherOfManayAvatarEvents += new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);          

   }

}

class Avatar
{
   public void HandleAvatarEntersRoom(object sender, EnterRoomEventArgs e)
   {
       Log.Write("avatar has entered the room");
   }

   public void HandleAvatarLeaveRoom(object sender, LeaveRoomEventArgs e)
   {
       Log.Write("avatar has left room");
   }

   public void HandleAnotherOfManayAvatarEvents(object sender, AnotherOfManyEventArgs e)
   {
       Log.Write("another avatar event has …
Run Code Online (Sandbox Code Playgroud)

.net c# events

33
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×2

.net ×1

events ×1