一‘、介绍C#语言的两次编译
1:C#语言->编译器编译exe/dll(微软的中间语言IL)->当启动exe文件时(JIL编译器,立即编译IL,变成公共言运行时(CLR))->根据电脑操作系统,编译成机器码
2:IL也是一种面向独享语言,但不好阅读
3:metadata:元数据(数据清单)描述了DLL/exe里各种信息
编译器编译exe/dll除了IL还有metadata,当启动exe文件时,JIL编译器先读取metadata(清单描述程序集(dll/exe)里的命名控件,里有多少个类,类中有多少个属性,类中有多少个方法,类中有多少个字段等),JIL编译器编译IL会跟清单进行比对,吻合就正常使用
二、托管代码和非托管代码区别
托管代码:在CLR管理之下运行的程序指令代码(MSIL指令)
非托管代码:仅针对特定操作系统而生成的CPU机器指令
公共语言运行库(CLR)由两部分组成
CLS(Common Language Specification);公共语言规范,解决不同开发语言之间语法问题
CTS(Common Type System):用于系统类型,解决不同开发语言之间的数据类型差异
三、反射(Reflection)
1:概念:通过使用一个“程序集”(exe/dll)把我们要使用的类的“命名空间、类名”通过“字符串”方式,使用反射技术,从而的得到这个类的对象。
记住:我们想使用一个类的对象,不见得非得通过直接new的方式,也可以通过“反射”方式得到。
2:引用System.Reflection 命名控件,它是Net.Framework提供的类库,使用程序集类:Assembly,可以读取和使用metadata
3:步骤如下
a、先定义一个人的接口
namespace ConsoleApp2
{
//义一个人的接口
public interface People
{
void Work();
void Sleep();
}
}
b、定义一个Student类和Teacher类,继承People类,并实现People类规定的方法
namespace ConsoleApp2
{
public class Student : People
{
///
标签:反射,exe,语言,C#,技术,dll,编译器,IL,metadata
From: https://blog.csdn.net/m0_61199122/article/details/143017116