创建并覆盖放入参数中的接口
本文关键字:接口 参数 覆盖 创建 | 更新日期: 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)
{
}
}