反射的定义与应用

反射就是使用代码动态的获取类型信息。

类型:值类型(int ,bool,struct..)引用类型(string,array,自定义类...)

内容:字段,属性,构造函数,方法...

如果需要获取类型的信息,就需要获取类型的Type对象,虽然通过实例化对象可以访问成员的信息,但是有局限性,比如类型的私有成员,泛型接口约束,接口实现   ,基类等仅仅依靠实例化对象很难获取,但是使用Type对象就可以简单的了解类型的全面信息。

获取Type类对象方法:

1.对象.GetType(); //object的方法

2.Typeof(类型空间.类名);  

3.Type.GetType(“类型空间.类名”);  //Type的方法


反射之字段: 

class Person
 {
     private int id = 43285;  //私有字段
     public string name;    //公共字段
     public int age=15;      //公共字段
 }

 public class Mainclus
 {
     internal static void Main(string[] args)
     {
         Type type= typeof(demo2.Person);  //获取类型对象
         //获取公共的访问字段,上述的id是获取不到的,可以用GetFields函数的重运载方法获取,如FieldInfo[] fieldInfos= type.GetFields(BindingFlags.Static);重运载的参数是枚举类型,下图截取了一点适用不同的类型。无参数是默认获取公共字段
         FieldInfo[] fileInfo= type.GetFields();
         foreach (FieldInfo fi in fileInfo)
         {
             Console.WriteLine($"字段类型:{fi.FieldType},字段值:{fi.GetValue(new Person())}"); //要获取非静态字段信息,要实例化,如果是静态字段,填写null。
         }
         //我们还可以设置name的值,name是非静态的,所以要实例化
         Person  person= new Person();
         FieldInfo fieldInfo01 = type.GetField("name");  //type.GetField是获取单个字段信息
         fieldInfo01.SetValue(person, "湖南");//参数是给什么对象赋给什么值,如果是静态字段就填null
         Console.WriteLine(fieldInfo01.GetValue(person));

     }

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值