Vb.net &引用;这个班级;在通用方法中?

Vb.net &引用;这个班级;在通用方法中?,vb.net,generics,Vb.net,Generics,我仍然在寻找通用方法和签名,我怀疑这是一个常见问题,但是 我有一个名为DtaRow的基类,它主要由一个列表(字符串)组成。我有几个DtaRow的子类,还有其他的方法,没有其他的改变。因此,我们有一个DateRow,其中有一个名为Date的方法,该方法从列表中获取一个项目,并基于该字符串返回DateTime。我们有另一个名为NumberRow的类,它有一个TheNumber,从列表中选择一个不同的项目,并使用Double。将其解析为Double。等等 我想要一个返回*行的深度副本的方法。由于所有这

我仍然在寻找通用方法和签名,我怀疑这是一个常见问题,但是

我有一个名为DtaRow的基类,它主要由一个列表(字符串)组成。我有几个DtaRow的子类,还有其他的方法,没有其他的改变。因此,我们有一个DateRow,其中有一个名为Date的方法,该方法从列表中获取一个项目,并基于该字符串返回DateTime。我们有另一个名为NumberRow的类,它有一个TheNumber,从列表中选择一个不同的项目,并使用Double。将其解析为Double。等等

我想要一个返回*行的深度副本的方法。由于所有这些类之间的所有数据都是相同的,因此可以在DtaRow中编写一个方法来实现这一点。但是,它只能返回DtaRow,这将丢失方法。所以我做了这个

Friend Function CopyTo(Of T As DtaRow)(Optional ByVal ParentIn As DtaTable = Nothing) As T
要调用此方法,我必须这样做

Dim TD As DateRow = TempD.CopyTo(Of DateRow)

这似乎没有帮助,因为我仍然有“演员阵容”,这正是我想要避免的。有没有一种方法可以在不使用(Of T as DtaRow)的情况下编写此代码,有没有一种语法与(Of T as WhatEverClassImBeingCalledOn)类似,或者没有任何类型输入的情况下编写此代码?

您可以使用的.Net变体

鉴于这些类别:

MustInherit Class DtaRow(Of T As {DtaRow(Of T), New})

    Function Copy() As T
        Return new T()
    End Function

End Class

Class DateRow 
    Inherits DtaRow(of DateRow)

End Class
DtaRow
的子类调用
Copy
,返回正确类型的对象:

Dim dt = new DateRow()
Dim copy = dt.Copy()
Debug.Assert(copy.GetType() = GetType(DateRow))
明显的缺点是:

  • DtaRow
    必须是通用的
  • 您可以在子类中搞乱泛型类型参数
但是没有其他方法告诉
DtaRow
中的方法返回子类类型的对象


如果你不想让
DtaRow
,你必须在每个子类中实现一个方法(它可以简单地调用
DtaRow
Copy
方法,只需将其转换为自己的类型)。

你可以将其更改为具有多个方法
CopyToDateRow
CopyToNumberRow
等。如果它没有损坏,不要修复它。这些方法都是100%相同的,这似乎正是我们想要避免的。好吧,那么DateRow与需要
(of T)
方法的NumberRow有何不同?您可以返回一个
DtaRow
并强制执行返回操作,但是
因为T
似乎更容易通过机械化原始问题来澄清(?)。
复制到不同的dta类型不是什么意思吗?调用调用的类型如何告诉您所需的返回类型?