我有一个抽象的基类和几个派生自那的类。基类具有 - 反对所有惯例 - 一些构造函数,我喜欢使用它们。 我现在正在编写一个扩展方法,它采用泛型类型参数。此类型是返回类型:
public static T Create<T>(string key) where T : Baseclass { }
现在,我想访问Baseclass&#39;构造函数如:
var item = new T(key);
基类定义相应的构造函数。
我知道,它可能是一个非常糟糕的设计,并且有使用反射(天真方式)或委托函数或将构造函数调用放在Create() - 调用之外的解决方法。
我只是好奇为什么C#-Compiler不允许访问抽象基类中定义的泛型类型的构造函数,泛型类必须从泛型类型约束中派生出来。
有几个问题,差不多相似,但是所有这些问题都关注约束构造函数的泛型类型,在我的例子中,约束是类继承。
答案 0 :(得分:0)
那么,首先你错过了new()
约束,它允许构造泛型类型,即
public static T Create<T>(string key) where T : Baseclass, new()
{
...
}
但是,鉴于您需要将参数传递给构造函数,这只会导致替换another的一个错误。解决这个问题的一种方法是避免构造函数注入(如果可能)并转而使用参数注入
var item = new T();
item.Key = key;
如果 是构造函数注入,那么正如您所提到的,您几乎只能使用Reflection。