1

考虑以下场景:

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 完全是空的。这让我认为可能有更好或更可接受的方式来处理事情。我也可以从一个空的基类继承,那会更好吗?做这种事情的首选方法是什么?

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

4

1 回答 1

1

答案会有所不同,具体取决于您使用的 .NET Framework 版本。查找有关协变逆变的文章以了解问题。 这是一个例子。

.NET 4 和 4.5 支持这种用法。

.NET 的早期版本会让您使用类似于ICondition您提到的接口的东西。

于 2013-06-20T18:27:44.927 回答