Я знаю, что немного опоздал на эту вечеринку, но я думал, что буду весить.
Существует несколько подходов, не основанных на отражении, которые вы могли бы использовать здесь.
Этот DisplayMethod
вызов, которому вы передаете журнал, не является конструктором вашей формы (иначе он будет называться New
), поэтому я предполагаю, что это метод, который определяет, какую форму загружать для отображения журнал.
Если это так, вы можете просто добавить универсальный параметр к этому вызову метода следующим образом:
Public Sub DisplayForm(Of ParentT)(Journal As Journal(Of ParentT))
Dim JournalParentType = GetType(ParentT)
'...
End Sub
Поскольку вы используете IoC, вы можете пойти еще дальше. Примерно так:
Public Sub DisplayForm(Of ParentT)(Journal As Journal(Of ParentT))
Dim form = ioc.Resolve(Of IForm(Of ParentT))
form.DataSource = Journal.Parent
form.Show()
End Sub
Конечно, вам нужно определить свой собственный интерфейс IForm(Of T)
, чтобы сделать эту работу - но теперь не требуется никакого отражения.
Другим подходом было бы иметь базовый класс Journal
Journal(Of ParentT)
и свойство ParentType
в Journal. В качестве альтернативы вы можете иметь интерфейс IJournal
, который делает то же самое.