有人可以确认我的以下方法是否正确或有更好的选择:
// 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()
答案 0 :(得分:1)
我宁愿使用这种方法,可以轻松使用DI:
IEnumerable<IWeapon>
如果你需要多种武器,那么你只需在构造函数中注入{{1}}并适当地改变逻辑。