Как вы передаете тип объекта в класс? - PullRequest
0 голосов
/ 30 ноября 2018

Это пример моего реального сценария, в котором используется LiteDB.Это упрощает проблему для более широкого вопроса .net.

Допустим, у меня есть 3 класса:

Public Class Control
    Public Property ID As Integer
    Public Property ControlName As String
End Class

Public Class Controller
    Public Property ID As Integer
    Public Property ControllerName As String
    Public Controls As List(Of Control)
End Class


Public Class Console
    Public Property ID As Integer
    Public Property ConsoleName As String
    Public Controllers As List(Of Controller)
End Class

Я сопоставляю Controller и Console с двумя отдельными BindingSources через конструктор Data Source.

У меня есть Custom Control, который содержит ComboBox.Экземпляры этого связаны либо с List(Of Control), либо с List(Of Controller) для страниц, редактирующих списки контроллеров и консолей.

Теперь я хочу, чтобы пользовательский элемент управления обновил соответствующее свойство как в Controller, так и в консоли, передав ему свойство whoes ID feild, которое я хочу обновить с помощью SelectedValue в выпадающем списке.Надеюсь, что приведенный ниже псевдокод иллюстрирует это:

'Custom Control with ComboBox:
Public Class UserControl

    Public bs As BindingSource ' Can contain rows of Controller or Console
    Public CollectionName As String

    Dim WithEvents KComboBox As ComboBox

    Private Sub ComboChanged() Handles KComboBox.SelectionChangeCommitted

        ' [PseudoCode]
        DirectCast(bs.Current, Controller).[CollectionName].ID = KComboBox.SelectedValue
        ' Resolves to:
        DirectCast(bs.Current, Controller).[Controls.ID] = KComboBox.SelectedValue
        ' or:
        DirectCast(bs.Current, Console).[Controllers.ID] = KComboBox.SelectedValue

    End Sub

End Class

И я бы настроил пользовательские поля таким образом:

    Dim cbControls As New UserControl With {.bs = ConrollerBS, .CollectionName = "Controls"}
    Dim cbControllers As New UserControl With {.bs = ConsoleBS, .CollectionName = "Controllers"}

Я думаю, что это может включать Reflection?Я попытался прочитать об этом, но это заставило мою голову сорваться.

Как мне достичь вышеуказанного?

...