我有一个定义为的类:
public class FindResultEx <TL> where TL : TagLocation
{
}
对此有三个问题。首先,有没有一种方法可以创建此类的实例new FindResultEx()
,它与new FindResultEx()<TagLocation>
相同?
第二,是否有一种方法可以将返回值声明为FindResultEx
类型,然后假定它是FindResultEx<TagLocation>
?
第三,如果我确实对FindResultEx<TagLocation>
进行了定义或强制转换,它将处理FindResultEx<ExtendedFromTagLocation>
类型的对象-对吗?
答案 0 :(得分:2)
第一个和第二个问题-不。 FindResultEx
和FindResultEx<T>
是两个完全不同的类。
第三个问题-实际上没有。但是您可以使用带有协变参数的接口,例如IFindResultEx<out T>
。您可以从here阅读有关协方差的更多信息。
答案 1 :(得分:1)
FindResultEx
和FindResultEx<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的接口使用