如何创建一个接受接口实现作为参数的接口方法

时间:2019-10-16 17:55:29

标签: c# interface

我正在为游戏项目创建一个碰撞处理程序界面。我正在尝试获取实现的类以接受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。我该如何解决?

1 个答案:

答案 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更好的名称作为泛型的类型参数,但是我对所要提出的名称还不够熟悉。