我的泛型类构造函数可以从传入的类型推断类型吗?

时间:2021-03-08 01:49:19

标签: c#

我想做这样的事情:new DIConstructor(constructType) 其中 constructType 是一个 Type 对象。

我的 class DIConstructor<T> 期望我指明要构造的类型,但我实际上是将类型作为参数传递给对象的构造。

我知道我可以创建一个构造函数来接收类型为 T 的对象的实例,但我不想构造该对象。我只是想要这样,因为我在构造函数中提供泛型类型自行推断的类型。

这可能吗?

1 个答案:

答案 0 :(得分:1)

  • 你不能。
  • C# 不允许构造函数自身是泛型的,也不能在调用构造函数时将类型推断用于泛型 class' 类型参数。
  • 是的,我同意这是 C# 语言的一个不幸的
  • 但是对于常见情况有一种解决方法:static-工厂“模式”。
    • 我将“模式”放在引号中是因为我觉得术语设计模式被过度使用了 - 此外,大多数原始 GoF 设计模式只是针对编程语言局限性的解决方法(...哦,等等)

做这样的事情:

public class MyGenericType<T>
{
    public MyGenericType( T foo )
    {
        // ...
    }
}

public static class MyGenericType
{
    public static MyGenericType<T> New<T>( T foo )
    {
        return new MyGenericType<T>( foo );
    }
}

这样你就可以做到:

public static void Main( String[] args )
{
    var foo = MyGenericType.New( 1234 ); // MyGenericType<Int32>
    var bar = MyGenericType.New( "bar" ); // MyGenericType<String>
}