通过晚期绑定读写属性Property和字段Field

来源:互联网 发布:网络类型无需合约版 编辑:程序博客网 时间:2024/05/17 08:58

晚期绑定读写属性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);

 

 

原创粉丝点击