强文我有一个基类,其中包含一个用于同步数据的方法。但是,我需要能够在进程中创建一个与继承基类的父对象相同的新对象。
我想做这样的事情:
Sub Transfer(ByVal OBType As BaseClass)
Dim A as new typeof(OBType)
A.doSomething()
End Sub
修改
我为任何困惑道歉
我的用例是我在两个对象之间传输数据,该方法负责合并它们之间的更改。调用该方法时,它会获取一组记录,然后必须调用一个同步它们的传输方法。执行GetDataRow时我需要有一个新版本的对象,我还需要一个新版本才能完成传输。
这是代码的精简版本:
GetDataRow从数据行创建对象并传输数据,然后对其进行比较并进行必要的更改。
Sub Transfer(ByVal OBType As BaseBLLClass)
'Get a list from each side and synch
Dim DT As DataTable = GetDataMethod() ‘Gets data to transfer
Dim A As OBType
Dim B As OBType
For Each Row As DataRow In DT.Rows
A = New OBType
B = New OBType
GetDataRow(A, Row).TransferData(B)
Next
End Sub
解决方案
Public Shared Sub Base_Transfer(Of OBType As BaseBLLClass)()
'Get a list from each side and synch
Dim DT As DataTable = GetDataMethod() ‘Gets data to transfer
Dim A As BaseClassUIM = Activator.CreateInstance(GetType(OBType))
Dim B As BaseClassUIM = Activator.CreateInstance(GetType(OBType))
For Each Row As DataRow In DT.Rows
A = Activator.CreateInstance(GetType(OBType))
B = Activator.CreateInstance(GetType(OBType))
GetDataRow(A, Row).TransferData(B)
Next
End Sub
答案 0 :(得分:1)
您可以使用Activator.CreateInstance构造具有适当类型的新对象。完成后,您可以将其强制转换为基类。
答案 1 :(得分:1)
我不知道它在VB中会有什么样子,但在C#中你可以用这样的泛型来做到这一点:
public void Transfer<T>(T item) where T: BaseClass, new()
{
var a = new T();
a.DoSomething();
}
这是我在VB中写这篇文章的微弱尝试:
Sub Transfer(Of T As {BaseClass, New})(ByVal OBType As T)
Dim A as new T
A.doSomething()
End Sub