.net反射

什么是反射?

让程序在运行的时候能动态获取程序中的类或者其他详细信息。

1、获取程序集信息

方法一:Assembly assembly = Assembly.LoadFile(@"D:\133\121\绝对路径 ")

方法二:Assembly assembly = Assembly.LoadFile("程序集名.后缀名");//只能在当前运行文件的Dbug文件下面找。

Cosole.WriteLine(“程序名称”+assembiy.FullName);

Cosole.WriteLine(“程序集位置”+assembiy.Location);

2、获取类,通过模块和程序集都可以

Type Types = assembly.GetTypes();

foreach (type item in types)

{

Cosole.WriteLine(“类型名称”+item.Name);

Cosole.WriteLine(“类型的完全命名”+itme.FullName);

Cosole.WriteLine(“类型的类别”+itme.Location);

}

3、获取主要的类的成员信息

Type student = assembly.GetType("完全名")(完全名=类名+命名空间);

MemberInfo[] mi = student.GetMembers();  //获取里面的成员(数组) Member =>方法

foreach(MemberInfo itme in mi)

{

Cosole.WriteLine(“成员名称”+itme.Name);

Cosole.WriteLine(“成员类别”+itme.MemberType);

}

4、declare =>声明

BindingFlags flages = BngdingFlags.public | BingdingFlags.DesclaredOnly | BingdingFlags.Instance; //约束:获取哪种类型的方法 这里指的是获取自己定义的实例的公开的方法(非公开的私有的为Nonpublic)

(1

MemberInfo[] mi = student.GetMembers(flages);  //获取方法 

(2

PropertyInfo[] pi = Student.GetProperties(flages)//获取属性(数组)

(3

FieldInfo[] fieldlnfos = Student.GetFields(flages)  //获取字段

5、在当前程序集中,获取Type的四种方式

(1 Type student = assembly.GetType("完全名")  前提是有程序集对象

(2 Type student = Type.GetType("完全名") 只能获取自己程序集里面的Type 

(3 Type student = typeof(类);必须拥有该类型的引用

(4 Student student = new Student

 type studentA = student.GetType(); 

5、使用反射创建对象

Type student = typeof(类);

Object entity = Activator.CreateInstance(student);

使用反射去调用方法

MethodInfo  methodInfo = student.GetMethod("方法名");

//调用

methodInfo.Invoke(entity,new object[]{ 参数 });  --可以接收返回值

6、用反射给属性赋值

PropertyInfo[] propName = Student.GetProperty(”属性名“)//获取属性(数组)

propName.SetValue(对象,"要赋的值")   --当前对象为entity

7、获取私有方法需要加上这个

BindingFlags flages = BngdingFlags.Nonpublic | BingdingFlags.DesclaredOnly | BingdingFlags.Instance;

8、给字段赋值

FieldInfo fieldInfo = Student.Getfield("字段名");

fieldInfo.SetValue(对象,”要赋的值“)

object 返回的值= fieldInfo.GetValue(对象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值