创建并覆盖放入参数中的接口

本文关键字:接口 参数 覆盖 创建 | 更新日期: 2023-09-27 18:18:35

目前我正在将代码从Java转换为c#,并使用一个函数:

        eventManager.Listen(typeof(EntityCreateEvent), 
        new EntityCreateListener()
        {
            public override void Create(Entity Entity)
            {
                //add(entity);
            }
        });

问题是,这在c#中是不合法的。我如何在c#中做到这一点?我宁愿不做一个工作,因为我有相当多的这些在代码中,我正在改变的东西在覆盖,需要是动态的

创建并覆盖放入参数中的接口

您正在创建事件侦听器。

Java提供匿名接口作为订阅事件的一种方式。

c#没有匿名接口。但是,该语言中有一个事件框架。

与其在EventManager上公开Listen的方法,不如公开一个事件:

 class EntityCreatedEventArgs : EventArgs
 {
      public Entity Entity {get; set; }
 }
 class EventManager
 {
      public event EventHandler<EntityCreatedEventArgs> EntityCreate;

      private void FireCreateEvent(Entity entity)
      {
          if(this.EntityCreate)
          {
               this.EntityCreate(this, new EntityCreatedEventArgs { Entity = entity });
          }
      }
      // Rest of implementation
 }

那么你的听力课就可以"订阅"这个事件了

 public class OtherThing
 {
       public OtherThing(EventManager eventManager)
       {
           eventManager.EntityCreate += this.EventManager_EntityCreate;
       }
       void EventManager_EntityCreate(object sender, EntityCreatedEventArgs args)
       {
       }
 }