Vb.net 抽象泛型的良好实践是什么?

Vb.net 抽象泛型的良好实践是什么?,vb.net,generics,interface,abstraction,Vb.net,Generics,Interface,Abstraction,考虑以下场景: Public Class Condition(Of T) '... End Class 现在,我用各种类型创建了这个类的几个实例。我现在希望用这些实例填充一个通用列表。比如: Dim Conditions As New List(Of Condition....?) Conditions.add(new Condition(Of String)) Conditions.add(new Condition(Of Double)) Conditions.add(new

考虑以下场景:

Public Class Condition(Of T)

    '...

End Class
现在,我用各种类型创建了这个类的几个实例。我现在希望用这些实例填充一个通用列表。比如:

Dim Conditions As New List(Of Condition....?)
Conditions.add(new Condition(Of String))
Conditions.add(new Condition(Of Double))
Conditions.add(new Condition(Of CustomClass))
最好的方法是什么?目前,我正在做以下工作:

Public Class Condition(Of T)
    implements ICondition

    '...

End Class
像这样使用它:

Dim Conditions As New List(Of ICondition)
Conditions.add(new Condition(Of String))
Conditions.add(new Condition(Of Double))
Conditions.add(new Condition(Of CustomClass))
然而,ICondition完全是空的。这让我觉得可能有一种更好或更被接受的方式来处理事情。我也可以从空基类继承,这样会更好吗?做这类事情的首选方法是什么


我理解,只要包含泛型的列表是更广泛的类型,我就可以插入任何类型的条件。但是,我不想让它超出必要的范围-我只想能够插入属于
公共类条件(of T)
的实例的对象,但其类型可能会有所不同。

答案会有所不同,这取决于您使用的.NET Framework的版本。查阅有关协方差和逆方差的文章,了解问题

.NET4和4.5支持这种用法


早期版本的.NET会让您使用类似您提到的
i条件
接口。

答案会有所不同,具体取决于您使用的.NET Framework版本。查阅有关协方差和逆方差的文章,了解问题

.NET4和4.5支持这种用法


早期版本的.NET会让你使用你提到的
I条件
界面。

我知道我可以把我的
列表(条件..)
扩大,变成
列表(对象)
,但是我想让类型限制尽可能的窄-它们必须从
条件(Of T)
实例化-但是使用任意类型。我没有从这篇文章中得出正确的含义吗?您可能已经超越了协方差和逆方差的限制,但我假设您的代码只是一个示例,而不是实际的工作代码。为了帮助您解决协方差和/或逆变,条件对象中的类型需要是同一继承树的一部分。由于string、int和double不以这种方式协作(除非它们是对象),所以您只有两个选项-在列表中使用Object,或者在列表中使用ICondition。好的,我知道这可能是一个罕见的例子。这个项目很有趣;)。到目前为止,这在我的项目中已经出现过两次。。但可能是因为我试图强迫一个不自然存在的结构。虽然它似乎很适合这个项目,所以我将继续它。谢谢。我知道我可以把我的
列表(条件的..)
扩展成
列表(对象的)
,但是我想让类型限制尽可能的窄-它们必须从
条件(条件的T)
实例化-但是使用任意类型。我没有从这篇文章中得出正确的含义吗?您可能已经超越了协方差和逆方差的限制,但我假设您的代码只是一个示例,而不是实际的工作代码。为了帮助您解决协方差和/或逆变,条件对象中的类型需要是同一继承树的一部分。由于string、int和double不以这种方式协作(除非它们是对象),所以您只有两个选项-在列表中使用Object,或者在列表中使用ICondition。好的,我知道这可能是一个罕见的例子。这个项目很有趣;)。到目前为止,这在我的项目中已经出现过两次。。但可能是因为我试图强迫一个不自然存在的结构。虽然它似乎很适合这个项目,所以我将继续它。谢谢