C# 反射

虚伪

唉,一点都没感觉到快乐,理解起来其实很容易 就是把dll或者exe中的方法获取出来,然后使用,想想更像是在学校中的抄作业吧,emmm具体来说是抄答案,也不知道人家写个啥,然后改改凑凑 给了个答案,哈哈 抄数学一开始就这么干,给省几个步骤,和人家不太一样 ,想要自己实现还是挺难的 ,毕竟对方法不熟悉,本人也不想慢慢去查找资料,就找视频研究一下

语言的编写实现原理:

在这里插入图片描述
以Visual Studio 为例,在项目栏部分点击重新生成就会生成exe或者dll文件。啥?,你不知道位置,好吧 如下:
在这里插入图片描述
组成部分:

  1. metadata 元数据
    任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
  2. IL 中间语言
    对于这个东西理解 通过ILSpy 反编译工具,其实就是打开dll,IL其实也是一种语言 如下:
    在这里插入图片描述
    中间语言了解就好 懂不懂 又不是做外挂,不那么重要
    关于JIT:
    什么是JIT

定义

这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:
Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名空间下。

简单来说 反射是.Net Framework提供的一个帮助类库,可以访问dll的metadata,并且使用它

Assembly

一般情况下,在C#文件目录下bin/debug中的dll或者exe的获取。操作方式有两种,一种是直接拷贝,一种是通过引用以及重新生成:
在这里插入图片描述

方法:

在这里插入图片描述

一般用的Assembly.Load
为了测试 我在unity中找到了一个postEffect.dll的文件进行操作

class Program
    {
        static void Main(string[] args)
        {
            Assembly assem = Assembly.Load("postEffect");
            foreach(var ltype in assem.GetTypes())
            {
                Console.WriteLine(ltype.Name);
                //foreach(var item in type.GetMethods())
                //{
                //    Console.WriteLine(item.Name);
                //}
            }
            Console.ReadKey();
        }
    }

然后就。。。。出现了报错
在这里插入图片描述
原因是没有导入依赖项,所以总结为 dll的反射处理 必须把依赖项也引用到才可以正常处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值