派生类中具有不同返回类型的抽象类方法

时间:2016-03-30 08:01:09

标签: c# abstract return-type base-class

我有这个抽象类:

 abstract class Animal {

    public abstract List<??????> getAnimals();

 }

我想更改返回类型以使其成为:

     Animal animal;

     if(/*Somthing*/){
          animal = new Cat();
          catList = animal.getAnimals();
     }else{
          animal = new Dog(); 
          dogList = animal.getAnimals();
     }

我想返回CatModelListDogModelList

如果狗和猫以Animal为基数,这可能吗?如果不是我认为的答案,那么这样做的正确方法是什么?

1 个答案:

答案 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可以是DogCat或源自Animal的任何其他类型:

class Dog : Animal<Dog>
{ }

然后你可以使用派生类来使用它:

Dog d = new Dog();
animal = d;
dogList = d.GetAnimals();

虽然看起来很奇怪。在Animal的例子中你得到了动物?我没有那种逻辑。