如何从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
答案 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, 没有),整数)