如何从reflection.assembly获取property.value?

时间:2010-02-09 21:32:59

标签: vb.net reflection

如何从reflection.assembly获取property.value?

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 个答案:

答案 0 :(得分:1)

要通过反射获取属性的值,请调用PropertyInfo.GetValue

但是,假设这是一个实例属性,您将需要一个获取属性值的类型的实例。例如,如果FriendlyName是Form2类的实例属性,则需要指定要获取FriendlyName的Form2的哪个实例。 (并且你将它作为obj参数传递给PropertyInfo.GetValue;在这种情况下你可以为index参数传递null。)

答案 1 :(得分:1)

以Itowlson撰写的文字为基础:

来自MCTS:.net 2.0:应用程序开发基础

首先得到集会:

  

Dim path As String =   “C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \”   + _“mscorlib.dll”

     

将组件调暗为组件=   Assembly.LoadFile(path)Dim hashType   如Type =   theAssembly.GetType( “System.Collections.Hashtable”)

获得类型后,可以要求它使用ConstructorInfo对象进行构造 你的新类型:

  

Dim argumentTypes()As Type =   Type.EmptyTypes'空构造函数   Dim ctor As ConstructorInfo =   hashType.GetConstructor(argumentTypes)

ConstructorInfo对象中表示的方法是一个专门的MethodBase对象 看起来像一个典型的方法,但总是返回一个特定的实例 类型。在此示例中,您要求Type类返回空构造函数。 (您正在提供一个空的Array类型来指定空构造函数。)您 也可以通过提供一个数组来请求具有特定参数的构造函数 构造函数参数类型,如:

  

Dim argumentTypes()As Type = _ New   Type(){GetType(System.Int32)}'一个   Int32类型的参数Dim ctor As   ConstructorInfo =   hashType.GetConstructor(argumentTypes)

拥有ConstructorInfo对象后,创建对象就像调用一样简单 构造函数。以下是调用空构造函数的方法:

  

将newHash变暗为Object =   ctor.Invoke(New Object(){})

获得对象的实例后,只需使用反射来获取信息类 你需要调用,然后调用info类来执行代码。

例如,在新的Hashtable实例上调用Add方法:

  

Dim meth As MethodInfo = hashType.GetMethod(“Add”)

     

meth.Invoke(newHash,New Object()   {“嗨”,“你好”})

您现在可以使用PropertyInfo类来获取您的项目的计数 Hashtable用于验证Add是否按预期工作:

  

Dim prop As PropertyInfo =   hashType.GetProperty(“Count”)

     

Dim count As Integer =   CTYPE(prop.GetValue(newHash,   没有),整数)