使用来自泛型类型 base class 的参数化构造函数

Using parameterized constructor from generic types base class

我有一个抽象的基础-class和几个从中派生出来的classes。 base-class 有一些违背所有惯例的构造函数,我很乐意使用它们。 我现在正在编写一个扩展方法,它采用泛型类型参数。此类型为 return 类型:

public static T Create<T>(string key) where T : Baseclass { }

现在,我想访问 Baseclass' 构造函数,例如:

var item = new T(key);

其中base-class定义了对应的构造函数

我知道,这可能是一个非常糟糕的设计,并且有使用反射(天真的方式)或委托函数或将构造函数调用放在 Create() 调用之外的变通方法。

我很好奇为什么 C#-Compiler 不允许访问在抽象基 class 中定义的泛型的构造函数,泛型必须从抽象基派生,因为通用类型约束。

有几个问题,几乎相似,但它们都关心约束构造函数的泛型类型,在我的例子中,约束是 class-继承。

嗯,首先你错过了 new() 约束,它允许构造一个通用类型,即

public static T Create<T>(string key) where T : Baseclass, new() 
{
    ...
}

但是,鉴于您需要将参数传递给构造函数,这只会导致替换 another 的一个错误。解决此问题的一种方法是避免构造函数注入(如果可能)并转而进行参数注入

var item = new T();
item.Key = key;

如果必须构造函数注入,那么正如你提到的,你几乎只能使用反射。