C#反射

183 阅读2分钟

前言

C#编写的程序会编译成一个程序集(.DLL或.exe),其中会包含元数据、编译代码和资源,通过反射可以获取到程序集中的信息 。通俗来讲,反射就是我们在只知道一个对象的外部而不了解内部结构的情况下,可以知道这个对象的内部实现

反射的作用

1.遍历成员,并调用成员

声明Student学生类:

image.png

Type的常用属性:

image.png

单独设置类中的字段值,获取类中的字段值:

image.png

image.png

    GetFields()获取所有公开的字段
    GetField(string name)获取特定名称的字段
    GetProperties()获取所有公开的属性
    GetProperterty()获取所有公开的方法
    GetMethods()获取所有公开的方法
    GetMethods()获取特定名称的方法
    
    MethodInfo类型常用方法
    Invoke(obj,object[]参数列表)==》调用方法

image.png

获取类的属性:

image.png

获取类的方法:

获取的是类的公开的public方法,属性的本质实际上就是set,get方法。 image.png

获取类的方法,并调用:

image.png

在线更新功能,下面是反射程序集

image.png

image.png

image.png

通过反射,获取得到的类型:,下面是反射的核心代码

image.png

可以应用在我们之后的游戏开发中更新问题上,当我们更新一些功能的时候,我们只需要替换相应的dll文件就可以了。

反射的优缺点

  • 优点:提高了程序的灵活性和扩展性,降低耦合度
  • 缺点:由于反射多了一道程序,性能上相较于直接代码要慢
  • 首先在编译中分为动态编译和静态编译,静态编译是在编译中确定类型,绑定对象,而动态编译是在运行中确定类型,绑定对象
    反射的优点就是可以动态创建对象、绑定对象,提高了程序的灵活性和扩展性,但反射是一种解释操作,在性能上不如静态编译快

反射与元数据

反射 来自 System.Reflection命名空间,它可以读取程序集中的元数据,利用元数据创建对象,从而实现各种功能。

    反射读取的是元数据,反编译读取的IL代码

参考文档: blog.csdn.net/qq_39847278… blog.csdn.net/qq_39847278… blog.csdn.net/LLLLL__/art…