C# 创建并重写要放入参数的接口
目前,我正在将代码从Java转换为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); }
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)
{
}
}