gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:14 25 4
gpt4 key购买 nike

我有这个抽象类:

 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 为基础,这可能吗?如果不是我认为的答案,那么正确的做法是什么?

最佳答案

然后你需要泛型来提供类型:

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 的实例中,你得到了动物?我不明白这个逻辑。

关于c# - 派生类中具有不同返回类型的抽象类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302940/

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