面试——反射概念,实际应用(如调用某程序集中某类下的方法)

反射比较复杂,本人还在理解阶段,此文仅仅为概念解释和常用API介绍(先明白概念并可以应用),来自对菜鸟教程和以下博文学习总结:

https://blog.csdn.net/pehao/article/details/73332520

https://blog.csdn.net/pengdayong77/article/details/47622235

概念

反射指程序可以访问、检测和修改它本身状态或行为的一种能力。

程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。

您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

实际应用

我们可以预先设计好项目的框架,这样就可以在未来要改动时,只更改外部类库,而不修改程序代码实现新的方法

以下是几个关键API

使用反射的命名空间

using System.Reflection;

加载程序集

public static Assembly Load(string assemblyString);
//填入类库名,但是注意要全局缓存

public static Assembly LoadFile(string path);
public static Assembly LoadFrom(string assemblyFile);
//填入路径

获得目标类的类型

assembly.GetType("/*命名空间.类名*/");

创建目标类的实例

assembly.CreateInstance("/*命名空间.类名*/");

修改属性值

type.GetProperty(/*属性名*/).SetValue(/*目标实例*/, /*修改值*/);

调用方法

//获得方法
var method = type.GetMethod(/*方法名*/);
//此方法可以添加参数限制寻找私有,静态方法,通过枚举System.Reflection.BindingFlags

//调用方法
method.Invoke(/*目标实例*/, /*参数数组*/);
//如果是静态方法,目标实例可为空,没参数方法数组可填空

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值