晚期绑定读写属性Property和字段Field均可以使用晚期绑定对象的InvokeMember()方法实现,也可以使用所指定类型的Type对象反射实现。
本例首先建立一个外部类项目Humen,并建立类Person,增加Name属性和_age字段,并建立一个主项目LateBindingOther并建立类LateBindingOther,添加外部引用Humen.dll文件,在LateBindingOther里使用了两种方法来读写属性Property和字段Field。在类Person里故意增加了命名空间,注意在LateBindingOther的Type tp = am.GetType("Human.Person", false, false)里,不能忘掉命名空间。
项目Humen的类Person代码:
项目LateBindingOther的类LateBindingOther代码:
运行效果:
指定类型的Type对象为tp,晚期绑定所创建该类型对象为obj,使用tp.InvokeMember()方法读写string类型的属性成员代码如下:
//写入Name属性
tp.InvokeMember("属性名称", BindingFlags.SetProperty, null, obj, 属性数组);
//读取Name属性
string name = (string)tp.InvokeMember("书信", BindingFlags.GetProperty, null, obj, null);
如果不用InvokeMember()方法,用以下方法更为简单直观。利用SetValue和GetValue方法,最后一个参数为索引化属性值的索引值,如果不是索引化属性值则取null
//获取指定属性的PropertyInfo类型对象p
PropertyInfo p = tp.GetProperty("属性名称");
//写入属性
p.SetValue(obj, 属性值, null);
//读取属性
string name = (string)p.GetValue(obj, null);