任何人都可以向这个界面解释(Out T)组件吗?我对接口的工作方式非常熟悉。我也明白T指的是一种类型......与Out部分有什么关系。
Public Interface IPageOfItems(Of Out T)
Inherits IEnumerable(Of T)
Property PageNumber() As Integer
Property PageSize() As Integer
Property TotalItemCount() As Integer
ReadOnly Property TotalPageCount() As Integer
ReadOnly Property StartPosition() As Integer
ReadOnly Property EndPosition() As Integer
End Interface
答案 0 :(得分:1)
.NET 4.0引入了covariance and contravariance of generic types。这就是这意味着什么。
此处的Out
关键字表示该类型为协变。协变类型T(Of D)
可以转换为类型T(Of B)
,其中D派生自B.当类型T(Of D)
仅使用D值作为输出时,这是可能的。 (因此单词 Out )。
例如,IEnumerable(Of Out T)
接口是协变的,因为它的方法都不接受T
类型的任何参数。因此,IEnumerable(Of String)
可以转换为IEnumerable(Of Object)
- 如果它提供对字符串的可枚举访问,则它提供对对象的可枚举访问(因为字符串是对象)。 / p>
相反,In
关键字可以应用于符合逆变的类型。逆变类型T(Of B)
可以转换为类型T(Of D)
,其中D派生自B.当类型T(Of B)
仅使用B值作为输入时,这是可能的。因此, In 这个词。换句话说,逆变与协方差完全相反。
逆变类型的一个很好的例子是IComparer(Of In T)
接口。此接口不提供返回T
值的方法;因此IComparer(Of Object)
可以被投射为IComparer(Of String)
- 毕竟,如果它可以比较对象,它可以比较字符串。
答案 1 :(得分:0)
这表示接口在通用参数T中是协变的。检查this article中的Generic Variance标题,该标题解释了VB.NET 2010(.NET Fx 4.0)中的新功能。
简而言之,协方差将允许替换较小的类型(例如子类)而不是更大的类型。例如,如果Tiger继承自Animal,那么我们可以使用IEnumerable(Of Tiger)代替IEnumerable(Of Animal)。 Eric Lippert在blog posts系列中很好地解释了方差(在上下文C#中)。
答案 2 :(得分:0)
这是新的.NET 4功能,允许您使用通用参数指定方差。几乎所有你需要知道的事情: