现在的位置: 首页 > 综合 > 正文

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

2012年12月06日 ⁄ 综合 ⁄ 共 801字 ⁄ 字号 评论关闭

对于一个对象,要设置它的某个Property,除了“obj.PropertyName=XXX” 这种方式直接设置的方式,还有哪些方式呢。

  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访问器)时,则会抛出异常。

  2. 可以先获取一个该属性的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);
    }

    也许你会想,干嘛不直接使用“obj.PropertyName=XXX”语句来设置值,而要这样大费周折呢。一般情况下这样显得的确多余,但一些特定情况,这样还是很有用处的,例如,在大家都知道的上层架构中,我们需要将数据库中读取出来的内容封装到一个实体对象中,这样就需要写大量的这种赋值语句,这时这种方式的优点就显示出来了。

抱歉!评论已关闭.