我正在为游戏项目创建一个碰撞处理程序界面。我正在尝试获取实现的类以接受IGameObject的子接口。
我尝试使用具有子接口IEnemy,IPlayer等的IGameObject。
interface ICollisionHandler
{
void HandleCollision(IGameObject object1, IGameObject object2);
}
class GenericCollision: ICollisionHandler
{
public void HandleCollision(IGameObject foo, IEnemy bar)
{
bar.TakeDamage();
}
}
GenericCollision应该接受IEnemy,因为它是IGameObject的子接口,但这使它无法实现ICollisionHandler。我该如何解决?
答案 0 :(得分:1)
您可以使用泛型并执行类似的操作。
interface ICollisionHandler<T>
where T : IGameObject
{
void HandleCollision(IGameObject object1, T object2);
}
class GenericCollision: ICollisionHandler<IEnemy>
{
public void HandleCollision(IGameObject foo, IEnemy bar)
{
bar.TakeDamage();
}
}
这允许实现使用IGameObject
的任何子接口。
我们鼓励您使用比T
更好的名称作为泛型的类型参数,但是我对所要提出的名称还不够熟悉。