gpt4 book ai didi

c# - 从基类返回派生类实例

转载 作者:太空狗 更新时间:2023-10-29 19:52:00 24 4
gpt4 key购买 nike

标题可能不清楚,请看下面的图

public abstract class Animal
{

public abstract Dog GetDog { get; }

public abstract Cat GetCat { get; }

}

public class Dog : Animal
{

public override Dog GetDog {
get { return this; }
}

public override Cat GetCat {
get { return null; }
}

}

在基类中拥有属性,返回派生类型,这被认为是一种不好的做法吗?或者我应该做类似的事情

public abstract AnimalTypeEnum AnimalType { get; }

编辑:根据评论,我想我应该更清楚我要实现的目标。 DogCat 类的新实例将由一个基于特定条件的单独函数创建,然后将 Animal 类型返回给调用者.调用方法将检查返回实例的类型并相应地使用它。

public Animal CreateAnimal(string path)
{

//Process the document in path and create either a new instance of dog or cat

Dog dg = new Dog();

return dg;

}

最佳答案

如果你只想要你派生的动物,你可以这样做:

public abstract class Animal<T> where T: Animal<T>
{
public T GetAnimal
{
get { return (T)this; }
}
}

public class Dog : Animal<Dog>
{
}

public class Cat : Animal<Cat>
{
}

public class Giraffe : Animal<Giraffe>
{
}

你这样调用:

var cat = new Cat();
var dog = new Dog();
var giraffe = new Giraffe();
Cat cat2 = cat.GetAnimal;
Dog dog2 = dog.GetAnimal;
Giraffe giraffe2 = giraffe.GetAnimal;

关于c# - 从基类返回派生类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961488/

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