新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员

使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员

新客网 XKER.COM 2005-05-17 来源: 收藏本文

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请包含本声明
///作者: CSDN网名alias88,邮件:alias88@163.com,QQ:63343 ,欢迎加我



    /// <summary>



    ///依导航路径调用对象成员方法,或返回对象其子、孙属性或字段成员.



///例子:



///获得表的第二列的名称



///GetMember(dataTable1.GetType(),"Columns.Item.Name",dataTable1,1)     



///执行表的Select方法,并返回可能的DataRow数组



///GetMember(dataTable1.GetType(),"Select",dataTable1,"客户编号 = 'C0001')



///取活动表单的名称,静态成员不需传入obj



///GetMember(typeof("System.Windows.Forms.Form"),"ActiveForm.Name",null,null)



    /// </summary>



    /// <param name="type">获得此类型的子孙成员</param>



    /// <param name="memberPath">子孙成员的路径描述,以点作为分隔符</param>



    /// <param name="obj">如果成员是静态类型,则为null</param>



    /// <param name="args">参数,注意此参数只能为memberPath最后一个成员使用</param>



    /// <returns></returns>



    public static object GetMember(Type type,string memberPath,object obj,object[] args)



    {



      if (memberPath==null || memberPath.Trim ()=="")



        throw new ArgumentException ("缺少必需的参数","memberPath");



      if (type==null )



        throw new ArgumentException ("缺少必需的参数","type");




 


      Type _objectType=type;



      object _object=obj;




 


      object[] paras=null;



      string[] strMember=memberPath.Split ('.');



      for (int i=0; i<strMember.Length  ;i++)



      {



        string MemberName=strMember[i];



        if (i>=strMember.Length-1 )



          paras=args;



          



        _object = _objectType.InvokeMember(MemberName,



          BindingFlags.Public | BindingFlags.NonPublic |



          BindingFlags.Instance | BindingFlags.Static |



          BindingFlags.GetField |  BindingFlags.GetProperty |



          BindingFlags.InvokeMethod | BindingFlags.IgnoreCase ,



          Type.DefaultBinder,  _object, paras);




 


        if (_object!=null)



          _objectType=_object.GetType ();



        else if (i<strMember.Length-1)



          throw new ArgumentNullException(MemberName);



      }



      return _object;



    }


收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐