我可以将默认类用于泛型吗?

时间:2018-10-11 16:55:12

标签: c# generics

我有一个定义为的类:

public class FindResultEx <TL> where TL : TagLocation
{
}

对此有三个问题。首先,有没有一种方法可以创建此类的实例new FindResultEx(),它与new FindResultEx()<TagLocation>相同?

第二,是否有一种方法可以将返回值声明为FindResultEx类型,然后假定它是FindResultEx<TagLocation>

第三,如果我确实对FindResultEx<TagLocation>进行了定义或强制转换,它将处理FindResultEx<ExtendedFromTagLocation>类型的对象-对吗?

3 个答案:

答案 0 :(得分:2)

第一个和第二个问题-不。 FindResultExFindResultEx<T>是两个完全不同的类。 第三个问题-实际上没有。但是您可以使用带有协变参数的接口,例如IFindResultEx<out T>。您可以从here阅读有关协方差的更多信息。

答案 1 :(得分:1)

FindResultExFindResultEx<T>是2种完全不同的类型。

但是,您可以创建从FindResultEx继承的类FindResultEx()<TagLocation>

这将创建一个继承关系,使得任何FindResultEx都是FindResultEx<TagLocation>,而类型FindResultEx<TagLocation>的对象不是FindResultEx

答案 2 :(得分:0)

我只想指出,如果您只使用默认值重载该类,则您的第一个和第二个问题是可能的。

public class FindResultEx <TL> where TL : TagLocation
{
}

public class FindResultEx: FindResultEx<TagLocation>
{
}

第三个问题可以通过与Covariance的接口使用