组合继承、实现和泛型问题
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>
在下面的示例中,我想创建继承自 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>