是否可以在继承的静态方法中检测类上下文?

Sha*_*ica 6 c# generics inheritance

好吧,这个标题有点不清楚,但我想不出更好的方式来解决它,除了解释它...

假设我有一个类Animal,使用静态的泛型方法:

public static T Create<T>() where T : Animal {
  // stuff to create, initialize and return an animal of type T
}
Run Code Online (Sandbox Code Playgroud)

我有子类Dog,Cat,Hamster等为了得到一个Dog,我可以这样写:

Dog d = Animal.Create<Dog>();
Run Code Online (Sandbox Code Playgroud)

要么

Dog d = Dog.Create<Dog>();
Run Code Online (Sandbox Code Playgroud)

这真是一回事.但是编写Dog这么多次似乎有点傻,因为我已经通过Dog子类调用静态方法了.

你能想到Create()在基类中编写方法的任何聪明方法,以便我可以调用

Dog d = Dog.Create();
Cat c = Cat.Create();
Hamster h = Hamster.Create();
Run Code Online (Sandbox Code Playgroud)

没有Create()在每个子类中编写方法?

Rom*_*ier 10

您可以使Animal类具有通用性.

class Animal<T> where T : Animal<T>
{
    public static T Create()
    {
        // Don't know what you'll be able to do here
    }
}

class Dog : Animal<Dog>
{

}
Run Code Online (Sandbox Code Playgroud)

但是Animal类如何知道如何创建派生类型的实例?

  • 你可能想要将`T`限制为动物:`class Animal <T>其中T:Animal <T>` (2认同)