从接口如何从函数返回通用/动态类型

时间:2015-01-11 14:26:00

标签: vb.net generics

我想在一个接口中创建一个看起来像这些东西的函数;

Function GetRecords AS Ilist(of T)

当实现界面时,我会设想用户或客户或供应商等代替'T'。编译器显然不喜欢T自己指出它没有定义。我理解这一点,但肯定可以定义一些通用的东西。我尝试过使用Type,但这会导致尴尬的类型转换。使用Object似乎更成功,但我无法找到明确的最佳实践或示例。

虽然我使用IList(T)作为示例,但它可以很容易地是IEnumerable(T)或ICollection(T)。我可以在界面中实际执行此操作吗?这将在vb.net中完成。

1 个答案:

答案 0 :(得分:1)

您需要以与创建泛型类时相同的方式创建通用接口。

Public Interface IRecords(Of T)

    Function GetRecords() As IList(Of T)

End Interface

用法:

Public Class Foo
    Implements IRecords(Of Foo)

    Public Function GetRecords() As IList(Of Foo) Implements IRecords(Of Foo).GetRecords
        'Return ...
    End Function

End Class

另一个选择是在“普通”界面中创建一个通用函数:

Public Interface IRecords
    Function GetRecords(Of T)() As IList(Of T)
End Interface

用法:

Public Class Foo
    Implements IRecords

    Public Function GetRecords(Of T)() As IList(Of T) Implements IRecords.GetRecords
        'Return ...
    End Function

End Class