C# 创建并重写要放入参数的接口

C# 创建并重写要放入参数的接口,c#,function,dynamic,parameters,interface,C#,Function,Dynamic,Parameters,Interface,目前,我正在将代码从Java转换为C#,并使用一个函数: eventManager.Listen(typeof(EntityCreateEvent), new EntityCreateListener() { public override void Create(Entity Entity) { //add(entity); }

目前,我正在将代码从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
 }

我在这段代码中没有看到任何接口…很抱歉,接口是“EntityCreateListener()”@Claies-这是Java语法
EntityCreateListener
是一个抽象基类,他在这里创建了一个新的内联实现。这是一件很酷的事情,你可以用Java做,而用C做不到。
 public class OtherThing
 {
       public OtherThing(EventManager eventManager)
       {
           eventManager.EntityCreate += this.EventManager_EntityCreate;
       }

       void EventManager_EntityCreate(object sender, EntityCreatedEventArgs args)
       {
       }
 }