2012.6.12 .net 反射

using System.Reflection;

反射就是动态加载程序集的元数据

 

反射有两种方式

第一种

直接 把对像反射

Type t=Typeof(对像)

 

第二种

从程序集加载

Assembly asm = Assembly.LoadFile(path);

得到是一个集合

List<Type> li = new List<Type>();
 li = asm.GetTypes().ToList<Type>();

 

反射后,怎么得到对像

           方法

            #region 反射类的方法 
            反射类
            //Type t1 = asm.GetType("lib.Person");

            得到这个类的方法
            //MethodInfo met = t1.GetMethod("Center");

            创建这个方法的对像
            //object o = Activator.CreateInstance(t1);

            引用这个方法
            //MessageBox.Show(met.Invoke(o,new string[]{"123"}).ToString());
            #endregion

           属性

            #region 反射类的属性
            //反射类
            Type t1 = asm.GetType("lib.Person");

            //得到这个类的属性

           
           PropertyInfo prt = t1.GetProperty("Name");
           object o = Activator.CreateInstance(t1);
           MessageBox.Show(prt.GetValue(o,null).ToString());

 


 

               //获取属性,和值
                foreach (PropertyInfo item in type.GetProperties())
                {

                    XElement xe = new XElement(item.Name.ToString(), item.GetValue(obj, null).ToString());
                    root.Add(xe);
                }

            #endregion

       

        特性

   

                  //获取特性值;
                    object[] o = item.GetCustomAttributes(typeof(ZdyarriAttribute),false);

                    XElement xe = new XElement(item.Name.ToString(), item.GetValue(obj, null).ToString());


                    XAttribute xa = new XAttribute("中文",((ZdyarriAttribute)o[0]).DisZdyarri.ToString());

 

 

反射常用的一些方法

开始反射

Type t1 = asm.GetType("lib.Person");

List<Type> li = new List<Type>();
 li = asm.GetTypes().ToList<Type>();

 

方法

MethodInfo met = t1.GetMethod("Center");

MethodInfo[] met=item.GetMethods()

 

属性

PropertyInfo prt = t1.GetProperty("Name");

PropertyInfo[] prt = t1.GetPropertys();

 

判读

IsSubclassOf 判断前面的是不是后面的子类;

T.IsSubclassOf(T1)

IsAssignableFrom 判断后面的是不是前面的子类

IsInstanceOfType  验证后面的对像是不是前面类型的实例

 

获取自定义标识属性

object[] objAttrs = property.GetCustomAttributes(typeof(CanNotSerializableAttribute), false);

object[] objj = item.GetCustomAttributes(typeof(TnameAttribute), false);

 

反射有很多少实际应用,待续.................................

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值