利用反射设置对象的属性(Property)

  1. 利用Type.InvokeMember()
    如下面的代码

using System.Reflection;
MyObject obj = new MyObject();
obj.GetType().InvokeMember("Name",
    BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
    Type.DefaultBinder, obj, "MyName");

若按这种方式,那么如果对象obj不包含名为Name的属性,或者该属性不可设置(没有set访问器)时,则会抛出异常。

  1. 可以先获取一个该属性的PropertyInfo对象,然后在设置其值。这样你可以检测该属性是否存在,以及该属性是否能进行设置。

using System.Reflection;
MyObject obj = new MyObject();
PropertyInfo prop = obj.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
if(null != prop && prop.CanWrite)
{
    prop.SetValue(obj, "MyName", null);
}

posted @ 2010-12-24 01:53  抱影无眠  阅读(420)  评论(0编辑  收藏  举报