gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:56:40 25 4
gpt4 key购买 nike

在下面的示例中,我想创建多种类型的 Puppies,这些 Puppies 继承自 PuppyBase 基类,该基类实现了 IPuppy 通用接口(interface)。 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();
}
}

最佳答案

为了能够在基类上指定泛型类型,您可以使它也泛型

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>

关于c# - 组合继承、实现和泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31338390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com