C# 反射(Reflection)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36981814/article/details/86688151

前言

什么是程序集?

  • 程序集是.net的概念
  • .net中的dll于exe文件都是程序集
  • 程序集,可以看所是一堆相关类打一个包,相当于java中的jar包

程序集包含资源文件,类型元数据(描述在代码中定义的每一个类型和成员,二进制形式)、IL代码(这些都封装在exe或者dll中),每一个程序集都有自己的名称、版本等信息。这些信息可以通过AssemblyInfo.cs文件来自己定义。

使用成程序集的好处

  • 程序中只引用必须的程序集,较少程序的尺寸
  • 程序集可以封装一些代码,提供必要的访问接口

一、什么是反射

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

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

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

二、反射的优缺点

优点:

  • 1、反射提高了程序的灵活性和扩展性。
  • 2、降低耦合性,提高自适应能力。
  • 3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点:

  • 1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
  • 2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

三、反射的用途

反射有下列用途:

  • 它允许在运行时查看特性信息。
  • 它允许审查集合中的各种类型,以及实例化这些类型。
  • 它允许延迟绑定的方法和属性。
  • 它允许在运行时创建新类型,然后使用这些类型执行一些任务。

四、反射的几个常用函数

  • bool IsAssignableFrom(Typec);  (直译:是否可以从c赋值)判断当前的类型的变量是不是可以接受c类型变量的赋值。
  • bool IsInstanceOfType(object o); 判断对象是否是当前类的实例(当前类可以是o的类、父类、接口)
  • bool IsSubclassOf(Type C):判断当前类是否是类c的子类。类的事,没有接口的事。
  • IsAbstract,判断是否为抽象的,含接口

猜你喜欢

转载自blog.csdn.net/qq_36981814/article/details/86688151