使用泛型类型基类

时间:2015-04-28 15:06:16

标签: c# generics constructor constraints

我有一个抽象的基类和几个派生自那的类。基类具有 - 反对所有惯例 - 一些构造函数,我喜欢使用它们。 我现在正在编写一个扩展方法,它采用泛型类型参数。此类型是返回类型:

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

现在,我想访问Baseclass&#39;构造函数如:

var item = new T(key);

基类定义相应的构造函数。

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

我只是好奇为什么C#-Compiler不允许访问抽象基类中定义的泛型类型的构造函数,泛型类必须从泛型类型约束中派生出来。

有几个问题,差不多相似,但是所有这些问题都关注约束构造函数的泛型类型,在我的例子中,约束是类继承。

1 个答案:

答案 0 :(得分:0)

那么,首先你错过了new()约束,它允许构造泛型类型,即

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

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

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

如果 是构造函数注入,那么正如您所提到的,您几乎只能使用Reflection。