C#基础加强(4)之秒懂IL、CTS、CLS和CLR

IL(Intermediate Language)

中间语言。.Net 平台下不只有 C# 语言,还有 VB.Net、F# 等语言。IL 是程序最终编译的可执行二进制代码(托管代码),类似于 Java 中的 class 字节码文件,也叫中间语言,不同的语言最终都编译成标准的 IL(MSIL),这样在 .Net 平台下不同语言之间的程序集就可以互相调用了。

C#基础加强(4)之秒懂IL、CTS、CLS和CLR

CTS(Common Type System)

公共类型系统。由于 .Net 平台上的不同语言中的数据类型各不相同,比如整数类型在  VB.Net 中是 Integer ,而 C# 中时 int 。.Net 平台制定了一个公用类型系统(CTS),各个语言编译器把自己语言的类型翻译成 CTS 中的类型。

看如下几个相同功能的示例程序:

internal class Program
{
    public static void Main(string[] args)
    {
        ;
        Console.WriteLine(i);
    }
}

C#

Public Shared Sub Main(ByVal args As String())

    Console.WriteLine(num)
End Sub

VB.Net

它们最终编译的 IL 语言都为如下:

.method public hidebysig static void Main(string[] args) cil managed
{
    .entrypoint
    .maxstack
    .locals init (
        [] int32 num)
    L_0000: nop
    L_0001: ldc.i4.s
    L_0003: stloc.
    L_0004: ldloc.
    L_0005: call void [mscorlib]System.Console::WriteLine(int32)
    L_000a: nop
    L_000b: ret
}

IL

C#基础加强(4)之秒懂IL、CTS、CLS和CLR

CLS(Common Language Specification)

公共语言规范。不同语言的语法不同,比如定义一个类 A 继承自 类 B,C# 的语法是 Class A : B{} ,而 VB.Net 的语法是 Class A Inherits B 。因此 .Net 平台规定了公共的语言规范(CLS)。

C#基础加强(4)之秒懂IL、CTS、CLS和CLR

CLR(Common Language Runtime)

公共语言运行时。顾名思义,IL 代码就是由 CLR 驱动运行,而 CLR 类似于 Java 中的 JVM,提供了垃圾回收 GC(Garbage Collection)、JIT(即时编译器)。

值类型变量是放再栈内存中,而引用类型的变量是放置在堆内存,栈内存变量会在方法结束后自动释放,而堆内存中的对象需要 GC 来回收。

C#基础加强(4)之秒懂IL、CTS、CLS和CLR

上一篇:postgresql 触发器


下一篇:javascript Array对象笔记