CLR
简而言之,托管代码就是执行过程交由运行时管理的代码。 在这种情况下,相关的运行时称为公共语言运行时 (CLR),不管使用的是哪种实现(Mono、.NET Framework 或.NET Core)。 CLR 负责提取托管代码、将其编译成机器代码,然后执行它。
如果运行 C/C++ 程序,则运行的代码也称为“非托管代码”。
托管代码是使用可在 .NET 上运行的一种高级语言(例如 C#、Visual Basic、F# 等)编写的。 使用相应的编译器编译以这些语言编写的代码时,无法获得机器代码, 而是获得中间语言代码,然后运行时会对其进行编译并将其执行。 C++ 是这条规则的一个例外,因为它也能够生成可在 Windows 上运行的本机非托管二进制代码。
什么是“中间语言”(简称 IL)? 中间语言是编译使用高级 .NET 语言编写的代码后获得的结果。 对使用其中一种语言编写的代码进行编译后,即可获得 IL 所生成的二进制代码。 必须注意,IL 独立于在运行时顶层运行的任何特定语言
从高级代码生成 IL 后,你很有可能想要运行它。 CLR 此时将接管工作,启动实时 (JIT) 编译过程,或者将代码从 IL 实时编译成可以真正在 CPU 上运行的机器代码。 这样,CLR 就能确切地知道代码的作用,并可以有效地_管理_代码。
================================================
CTS为Common Type System(通用类型系统),其是微软制定的一个正式的规范来描述类型的定义和行为,使得一种编程语言写的代码能和另一种编程语言进行沟通。
CTS规定,一个类型可以包括0个或者多个成员。
字段(Field)
方法(Method)
属性(Property)
事件(Event)
同时,CTS指定类型可见性规则和类型成员的访问规则:
private
family(C#中是protected)
family and assembly(C#中没有修饰符)
assembly(C#中是internal)
family or assembly(C#中是protected internal)
public
=================================================
CLS为Common Language Specification(公共语言规范),其定义了一个最小功能集,任何编译器只有支持此功能集,才可以兼容其他符合CLS、面向CLR的语言生成的组件。
====================================
非托管堆
回收器不知道如何释放非托管资源,如文件句柄,网络连接、数据库连接等。当非托管对象被托管对象引用时,托管对象被释放时应确保其相关的非托管对象被释放。
A 在定义类时,声明一个析构函数
B IDisposable接口
==================================================
C#编译成IL语言,然后CLR接管工作,进行JIT操作,把IL变机器语言,CLR此时可以管理代码
CLR 相当于虚拟机
C#是托管代码
C++是非托管代码
CLS公共语言规范 最小功能集
CTS通用类型系统 语言交流
========================
简而言之,托管代码就是执行过程交由运行时管理的代码。 在这种情况下,相关的运行时称为公共语言运行时 (CLR),不管使用的是哪种实现(Mono、.NET Framework 或.NET Core)。 CLR 负责提取托管代码、将其编译成机器代码,然后执行它。
如果运行 C/C++ 程序,则运行的代码也称为“非托管代码”。
托管代码是使用可在 .NET 上运行的一种高级语言(例如 C#、Visual Basic、F# 等)编写的。 使用相应的编译器编译以这些语言编写的代码时,无法获得机器代码, 而是获得中间语言代码,然后运行时会对其进行编译并将其执行。 C++ 是这条规则的一个例外,因为它也能够生成可在 Windows 上运行的本机非托管二进制代码。
什么是“中间语言”(简称 IL)? 中间语言是编译使用高级 .NET 语言编写的代码后获得的结果。 对使用其中一种语言编写的代码进行编译后,即可获得 IL 所生成的二进制代码。 必须注意,IL 独立于在运行时顶层运行的任何特定语言
从高级代码生成 IL 后,你很有可能想要运行它。 CLR 此时将接管工作,启动实时 (JIT) 编译过程,或者将代码从 IL 实时编译成可以真正在 CPU 上运行的机器代码。 这样,CLR 就能确切地知道代码的作用,并可以有效地_管理_代码。
================================================
CTS为Common Type System(通用类型系统),其是微软制定的一个正式的规范来描述类型的定义和行为,使得一种编程语言写的代码能和另一种编程语言进行沟通。
CTS规定,一个类型可以包括0个或者多个成员。
字段(Field)
方法(Method)
属性(Property)
事件(Event)
同时,CTS指定类型可见性规则和类型成员的访问规则:
private
family(C#中是protected)
family and assembly(C#中没有修饰符)
assembly(C#中是internal)
family or assembly(C#中是protected internal)
public
=================================================
CLS为Common Language Specification(公共语言规范),其定义了一个最小功能集,任何编译器只有支持此功能集,才可以兼容其他符合CLS、面向CLR的语言生成的组件。
====================================
非托管堆
回收器不知道如何释放非托管资源,如文件句柄,网络连接、数据库连接等。当非托管对象被托管对象引用时,托管对象被释放时应确保其相关的非托管对象被释放。
A 在定义类时,声明一个析构函数
B IDisposable接口
==================================================
C#编译成IL语言,然后CLR接管工作,进行JIT操作,把IL变机器语言,CLR此时可以管理代码
CLR 相当于虚拟机
C#是托管代码
C++是非托管代码
CLS公共语言规范 最小功能集
CTS通用类型系统 语言交流
========================