通用类型用法

时间:2016-11-08 06:59:31

标签: c# generics

有人可以确认我的以下方法是否正确或有更好的选择:

// 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()

1 个答案:

答案 0 :(得分:1)

我宁愿使用这种方法,可以轻松使用DI:

IEnumerable<IWeapon>

如果你需要多种武器,那么你只需在构造函数中注入{{1}}并适当地改变逻辑。