Как мне установить объект, чтобы быть типом другого объекта? - PullRequest
1 голос
/ 04 января 2010

сильный текст У меня есть базовый класс с методом синхронизации данных. Однако мне нужно иметь возможность создавать в процессе новый объект, который совпадает с родительским объектом, который унаследовал базовый класс.

Я хочу сделать что-то вроде этого:

Sub Transfer(ByVal OBType As BaseClass)
     Dim A as new typeof(OBType)
     A.doSomething()
End Sub

EDIT

Прошу прощения за путаницу

Мой вариант использования заключается в том, что я передаю данные между двумя объектами, и метод отвечает за объединение изменений между ними. Когда метод вызывается, он получает набор записей, а затем должен вызвать метод передачи, который синхронизирует их. При выполнении 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 ]

1 голос
/ 04 января 2010

Я не знаю, как это выглядело бы в 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
1 голос
/ 04 января 2010

Вы можете использовать Activator.CreateInstance , чтобы создать новый объект с соответствующим типом. Сделав это, вы можете привести его к базовому классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...