泛型类型用法

本文关键字:用法 泛型类型 | 更新日期: 2023-09-27 18:16:49

谁能确认一下我下面的方法是正确的还是有更好的替代方法:

// An interface
IAnimal
{
    pubilc void Hunt();
}
// An abstract class
Animal<T> : IAnimal
{
    public void Hunt()
    {
        UseWeapon(T);
    }
    protected abstract T GetWeapon();
    protected abstract void UseWeapon(T weapon);
}

这样我就可以有这样的实现:

Tiger : Animal<Claw>
Hyena : Animal<Teeth>
Eagle : Animal<Beak>
例如

:

Tiger : Animal<Claw>
{
    protected override void UseWeapon(Claw claw)
    {
        // logic here
    }
    protected override void GetWeapon()
    {
        // logic here to populate props & return Claw();
    }
}

然后调用:

IAnimal animal = GetRandomAnimal(); // OR GetTiger();
animal.Hunt()

泛型类型用法

我宁愿使用这种易于使用DI的方法:

interface IAnimal
{
    pubilc void Hunt();
}
interface IWeapon
{
}
Animal : IAnimal
{
    IWeapon _weapon;
    public void Animal(IWeapon weapon)
    {
       _weapon = weapon;
    }
    public void Hunt()
    {
        UseWeapon(_weapon);
    }
    protected abstract void UseWeapon(IWeapon weapon);
}

如果你需要多个武器,那么你只需要在构造函数中注入IEnumerable<IWeapon>并适当地改变逻辑。