首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类型用法

泛型类型用法
EN

Stack Overflow用户
提问于 2016-11-08 14:59:31
回答 1查看 73关注 0票数 0

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

代码语言:javascript
复制
// 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);
}

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

代码语言:javascript
复制
Tiger : Animal<Claw>
Hyena : Animal<Teeth>
Eagle : Animal<Beak>

例如:

代码语言:javascript
复制
Tiger : Animal<Claw>
{
    protected override void UseWeapon(Claw claw)
    {
        // logic here
    }

    protected override void GetWeapon()
    {
        // logic here to populate props & return Claw();
    }
}

然后我可以打电话给:

代码语言:javascript
复制
IAnimal animal = GetRandomAnimal(); // OR GetTiger();
animal.Hunt()
EN

回答 1

Stack Overflow用户

发布于 2016-11-08 15:36:15

我宁愿使用这种方法,它可以很容易地与DI一起使用:

代码语言:javascript
复制
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>并适当地更改逻辑即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40480777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档