我有这个抽象类:
abstract class Animal {
public abstract List<??????> getAnimals();
}
我想更改返回类型以使其成为:
Animal animal;
if(/*Somthing*/){
animal = new Cat();
catList = animal.getAnimals();
}else{
animal = new Dog();
dogList = animal.getAnimals();
}
我想返回CatModelList
和DogModelList
。
如果狗和猫以Animal
为基数,这可能吗?如果不是我认为的答案,那么这样做的正确方法是什么?
答案 0 :(得分:5)
然后你需要泛型来提供类型:
abstract class Animal<T> : Animal where T : Animal
{
public abstract List<T> GetAnimals();
}
abstract class Animal
// base type to make things easier. Put in all the non-generic properties.
{ }
其中T
可以是Dog
,Cat
或源自Animal
的任何其他类型:
class Dog : Animal<Dog>
{ }
然后你可以使用派生类来使用它:
Dog d = new Dog();
animal = d;
dogList = d.GetAnimals();
虽然看起来很奇怪。在Animal
的例子中你得到了动物?我没有那种逻辑。