2015-10-19 31 views
1

目前我轉換代碼從Java到C#和使用功能:創建和覆蓋的接口被放到一個參數

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

的問題是,這絕不是合法的C#。我如何去做這個在C#中?我不想做一個解決方法,因爲我在更改的代碼中有很多這樣的代碼,它們需要動態重載。

+0

我看不出有任何的接口此代碼... – Claies

+0

對不起,界面是「EntityCreateListener()」 – Zombleh

+0

@Claies - 這是Java語法。 'EntityCreateListener'是一個抽象基類,在這裏他創建了一個新的實現內聯。在Java中你可以用C#做​​不到的事情,這是一件很酷的事情。 –

回答

1

這裏您正在創建事件偵聽器。

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) 
     { 
     } 
}