在下面的示例中,我想创建多个类型的继承PuppyBase
基类的Puppies,该基类实现IPuppy
通用接口。 Bark
方法在基类中强制执行,其他 - 在派生CutePuppy
类中。组合继承,实现和泛型问题
我不能得到如何创建另一只小狗在这里谁想要另一个饲料和吠叫不同?
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();
}
}
你可以让它实现成为另一个IPuppy接口的变体。 'IPuppy,IPuppy '虽然'Sleep'必须是明确的实现,因为C#编译器不允许返回类型重载)。也就是说,这样的样品总是很奇怪。例如,你可能不会为不同的食物有不同的“吃”的实现 - 当你想喂它胡萝卜时,你不会明确地将'PuppyBase'投给'IPuppy ',是吗? :P –
Luaan
要解决您的“组合继承,实现和泛型问题”,请不要使用继承。只需让您的类直接实现接口并在复制功能时使用组合。 –
@Luaan,你是对的。在这个例子中这很奇怪,但是在真正的代码中我真的需要一些方法的不同实现。同时一些方法总是相同的,这就是为什么我决定使用基类。大卫阿诺,我会试试看,tnx。 – AsValeO