C# 泛型工厂方法

Gar*_*son 5 c# generics factory

也许这是一个简单的 C# 新手问题,但就这样吧 — 这将是我与其他问题的一次全新突破,这些问题非常困难,以至于没有人知道答案。:)

假设我有一个 C# 泛型类型:

Thing<T>
Run Code Online (Sandbox Code Playgroud)

假设我想使用静态工厂方法来制作一个东西。在 Java 中,这没有问题:

public static <T> Thing<T> createThing()
{
  return flag ? new Thing<Integer>(5) : new Thing<String>("hello");
}
Run Code Online (Sandbox Code Playgroud)

我如何在 C# 中执行此操作?谢谢。

Rei*_*ien 4

如果您想使用许多不同的模板参数之一返回模板化类的实例,一种方法是使用抽象基(或接口):

abstract class UntypedThing { }
class Thing<T> : UntypedThing
{
    public Thing(T t) { }
}

class Foo
{
    public static UntypedThing createThing(bool flag)
    {
        if (flag)
            return new Thing<int>(5);
        else return new Thing<String>("hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

该类UntypedThing将包含尽可能多的不依赖于模板类型的代码。理想情况下,该类Thing仅包含依赖于模板类型的代码。工厂类Foo总是返回前者。