Как получить значение property.value из mirror.assembly? - PullRequest
0 голосов
/ 10 февраля 2010

Как получить значение property.value из mirror.assembly?

Dim assembly As Assembly = assembly.GetExecutingAssembly()

For Each assemblyType As Type In assembly.GetTypes()
        If assemblyType.IsSubclassOf(GetType(Form)) Then
            'Dim name As AssemblyName() = assembly.GetReferencedAssemblies()


            If assemblyType.BaseType.ToString.EndsWith("Form2") Then
                Dim props As PropertyInfo = _
                GetType(Form2).GetProperty("FriendlyName")


                If Not props Is Nothing Then
                    ComboBox1.Items.Add(assemblyType.Namespace )

                End If
'//Here I want to get Prop.value that is string type



End If

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Опираясь на то, что написал Итоулсон:

Из MCTS: .net 2.0: Фонд разработки приложений

Сначала получите сборку:

Dim path As String = "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \" + _ "mscorlib.dll"

Dim theAssembly As Assembly = Assembly.LoadFile (путь) Dim hashType Как тип = theAssembly.GetType ( "System.Collections.Hashtable")

Как только у вас есть тип, вы можете запросить его для объекта ConstructorInfo, чтобы использовать для создания Ваш новый тип:

Dim argumentsTypes () As Type = Type.EmptyTypes 'Пустой Конструктор Dim ctor As ConstructorInfo = hashType.GetConstructor (argumentTypes)

Метод, представленный в объекте ConstructorInfo, является специализированным объектом MethodBase это выглядит и действует как типичный метод, но всегда возвращает экземпляр определенного тип. В этом примере вы просите класс Type вернуть пустой конструктор. (Вы предоставляете пустой массив типов для указания пустого конструктора.) Вы может также попросить конструктор с конкретными аргументами, предоставив массив типы аргументов конструктора, например:

Dim argumentsTypes () As Type = _ New Type () {GetType (System.Int32)} 'One аргумент типа Int32 Dim ctor As ConstructorInfo = hashType.GetConstructor (argumentTypes)

Когда у вас есть объект ConstructorInfo, создать объект так же просто, как вызвать конструктор Вот как вызвать пустой конструктор:

Dim newHash as Object = ctor.Invoke (New Object () {})

Как только у вас есть экземпляр объекта, вы просто используете отражение, чтобы получить информационный класс вам нужно позвонить, а затем вызвать информационный класс для выполнения кода.

Например, вызовите метод Add в вашем новом экземпляре Hashtable:

Dim meth As MethodInfo = hashType.GetMethod ("Добавить")

meth.Invoke (newHash, New Object () {"Привет", "Привет"})

Теперь вы можете использовать класс PropertyInfo, чтобы получить количество элементов в вашем Hashtable, чтобы проверить, что Add работал так, как вы ожидали:

Dim prop As PropertyInfo = hashType.GetProperty ("Count")

Dim count As Integer = CType (prop.GetValue (newHash, Ничего), Integer)

1 голос
/ 10 февраля 2010

Чтобы получить значение свойства с помощью отражения, вызовите PropertyInfo.GetValue .

Однако, предполагая, что это свойство экземпляра, вам потребуется экземпляр типа, для которого значение свойства get будет получено. Например, если FriendlyName является свойством экземпляра класса Form2, вам необходимо указать, для какого экземпляра Form2 вы хотите получить FriendlyName. (И вы передадите это как аргумент obj в PropertyInfo.GetValue; в этом случае вы можете передать значение null для аргумента index.)

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