我想创建一个返回类类型实例列表的共享函数。目前这是我的代码看起来像
class MyClass
Implements BusinessObject
Shared Function LoadAll(Of T As {BusinessObject, New})() As IEnumerable(Of T)
Dim helper = New SQLHelper()
Return helper.LoadDataTableFromDatabase("LoadTable", LoadAllProcedureName).Rows.Cast(Of DataRow).Select(Function(s) New T().FillDataRow(Of T)(s))
End Function
End Class
class MyDerivedClass Implements MyClass
End MyClass
当我去使用它时,我必须像这样使用它:
MyDerivedClass.LoadAll(Of MyDerivedClass)()
我希望能够推断出类型,而不必使用(Of MyDerivedClass)
,以便我的代码看起来像MyDerivedClass.LoadAll()
。
我将非常感谢您为实现这一目标所缺少的任何帮助或关键字。
答案 0 :(得分:1)
这是一个扩展方法,它(理论上)适用于您定义的任何类:
Public Module Module1
<Extension()> _
Public Function LoadAll(Of T As {BusinessObject, New})(ByVal x As T) As IEnumerable(Of T)
Dim LoadAllProcedureName As String = "LoadAllProcedure"
Dim helper = New SQLHelper()
Return helper.LoadDataTableFromDatabase("LoadTable", LoadAllProcedureName).Rows.Cast(Of DataRow).Select(Function(s) New T().FillDataRow(Of T)(s))
End Function
Public Sub Main()
Dim dC As New DerivedClass()
Dim allDc As IEnumerable(Of DerivedClass) = dC.LoadAll()
'::: Somewhat shorter syntax
Dim allDC As IEnumerable(Of DerivedClass) = (New DerivedClass()).LoadAll()
End Sub
End Module
但是,正如其他人所指出的那样,这并没有真正为你清理任何东西。更重要的是,您必须在您使用枚举(Of DerivedClass)
填充的任何变量中键入DerivedClass
,不是吗?
据我所知,你不能拥有Shared
扩展方法 - 如果你认为这是可行的方法。