如何将对象设置为另一个对象的类型?

时间:2010-01-04 20:22:35

标签: .net object

强文我有一个基类,其中包含一个用于同步数据的方法。但是,我需要能够在进程中创建一个与继承基类的父对象相同的新对象。

我想做这样的事情:

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

2 个答案:

答案 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