VB.无法将类转换为接口

本文关键字:转换 接口 VB | 更新日期: 2023-09-27 18:09:06

我有一段简单的代码,如下所示:

Public Interface ITest(Of T)
    Function getObj() As T
End Interface
Public Class clsTest(Of T As {IOrder, New})
    Implements ITest(Of T)
    Public Function getObj() As T Implements ITest(Of T).getObj
        Return New T
    End Function
End Class
Public Interface IOrder
    Property Name As String
End Interface
Public Class clsOrder
    Implements IOrder
    Public Property Name As String Implements IOrder.Name
End Class

当我创建一个clsTest对象,如:

Dim test As ITest(Of IOrder) = New clsTest(Of clsOrder)

我得到了以下错误:

ConsoleApplication1。clsTest(Of ConsoleApplication1.clsOrder)'不能转换为"ConsoleApplication1"。它(ConsoleApplication1.IOrder)"。考虑改变单词中的"T"将'Interface test (of T)'定义为Out类型参数'Out 'T"。

有人知道原因吗?如果我确实想将测试声明为ITest(Of IOrder),我该如何使其工作?谢谢。

VB.无法将类转换为接口

使用Out -关键字:

使您的接口在T中协变
Public Interface ITest(Of Out T)
    Function getObj() As T
End Interface

然后编译:

Dim test As ITest(Of IOrder) = New clsTest(Of clsOrder)

E。Lippert可以比我解释得更好:

  • 实现嵌套的通用接口