组合继承、实现和泛型问题

Combined inheritance, implementation and generics issue

在下面的示例中,我想创建继承自 PuppyBase 实现 IPuppy 通用接口的基础 class 的多种类型的 Puppies。 Bark 方法在基础 class 中实现,其他方法在派生 CutePuppy class.

中实现

我不明白如何在这里创建另一只想要另一种饲料并且吠叫方式不同的小狗?

public interface IPuppy<TBark, TDesiredFood>
{
    void Bark(TBark sound);
    Task<TDesiredFood> Sleep();
    Task Eat(TDesiredFood food);
}

public abstract class PuppyBase:IPuppy<Yap,Sausage>
{
    public void Bark(Yap sound)
    {
        Console.WriteLine(sound.ToString());
    }

    public abstract Task<Sausage> Sleep();
    public abstract Task Eat(Sausage food);
}

class CutePuppy : PuppyBase
{
    public override Task<Sausage> Sleep()
    {
        // Implementation
        // ...
        throw new NotImplementedException();
    }

    public override Task Eat(Sausage food)
    {
        // Implementation
        // ...
        throw new NotImplementedException();
    }
}

为了能够在基 class 上指定泛型类型,您可以将其设为泛型

public abstract class PuppyBase<TBark, TDesiredFood> : IPuppy<TBark, TDesiredFood>
    where TBark : ISound
{
    public void Bark(TBark sound)
    {
        Console.WriteLine(sound.ToString());
    }

    public abstract Task<TDesiredFood> Sleep();
    public abstract Task Eat(TDesiredFood food);
}

public interface ISound
{
    string ToString();
}

CutePuppy 你应该这样

class CutePuppy : PuppyBase<Yap,Sausage>

对于 NotSoNicePuppy

class NotSoNicePuppy: PuppyBase<Wow,Human>