在下面的示例中,我想創建多個類型的繼承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