VB.NET: используйте System.Type в привязке значений

avatar
Vye
8 августа 2021 в 16:10
48
0
0

Я пытаюсь использовать отражения в VB.NET для обработки типов.

    Public Function reflective(Of T)() As System.Type
        Dim t_ As T = Nothing
        Return t_.GetType()
    End Function
 
    Sub Main()
        Dim nbr_type As Type = reflective(Of Int32)() 'Works fine
        Console.Writeline("Number type is: " & nbr_type.Name) 'Works fine
        Dim nbr As nbr_type = Nothing 'Fails 'nbr_type' is not declared. It may be inac...
        'VB compiler completely fails to understand what I am trying to do
    End Sub

Как инициализировать переменную с помощью System.Type?

Источник
Olivier Jacot-Descombes
8 августа 2021 в 16:16
1

Вы можете просто написать Return GetType(T). Не нужно создавать переменную. См. Метод Activator.CreateInstance.

jmcilhinney
9 августа 2021 в 00:33
1

Во-первых, вам вообще не нужна эта функция reflective. Просто используйте Dim nbt_type = GetType(Int32).

jmcilhinney
9 августа 2021 в 00:36
1

Во-вторых, вам нужно лучше понять, как работает Reflection. Объект Type не является типом данных. Это объект, который содержит информацию о типе данных. Вы не можете использовать переменную, которая ссылается на объект Type, где ожидается тип данных. Как это может иметь смысл? Этот объект не существует до времени выполнения, но вы ожидаете, что компилятор поймет его во время компиляции. Не происходит. Как только вы начнете использовать Reflection, вы должны продолжать его использовать. Это означает, что все имеет тип Object, и вы используете Reflection для создания экземпляров и доступа к членам.

Craig
9 августа 2021 в 14:05
0

@jmcilhinney Но обратите внимание, что вы можете принудительно преобразовать в известный тип на границах; то есть, в зависимости от того, что вы хотите сделать в reflective(Of T), у вас может быть подпрограмма, выполняющая внутреннее отражение на Object, а затем выполняющая DirectCast для изменения результата на T. Или у вас может быть переменная, которая всегда имеет тип T, но использует отражение для доступа к ее свойствам или методам.

Ответы (0)