• .NET平台一些概念


    1.什么是CLR

    CLR(Common Language Runtime)公共语言远行时,是一个可由多种编程语言使用的“远行时”。CLR的核心功能(比如内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。CLR不关心开发人员使用哪种语言进行编程,只要编译器面向CLR就可以了,所有,开发人员应该使用自己最适合和熟悉的语言进行编程。所有的编程语言在面向CLR编译器的编译都生成了一个托管模块。托管模块是一个标准的32位的Microsoft Windows可移植执行体(PE32)文件,或者是一个标准的64位Windows可移植的PE32+文件,他们都需要CLR才能执行。

    2.中间语言

    MSIL(中间语言)代码 编译器编译源代码时生成的代码。在运行时,CLR将将IL编译成本地的CPU指令

    3.元数据

    元数据是一个二进制数据块,由几个表构成。这些表分为三个类别:定义表(definiton talbe)、引用表(reference table)和清单表(mainfest table)。

    常用元数据定义表(编译器编译源代码时,代码定义的任何一样东西都会导致定义表中的表中创建一个记录项):

    ModuleDef 总是包含一个用于标示模块的记录项。

    TypeDef 模块中定义的每个类型都在这个定义表中有一个对应的记录项。

    MethodDef 模块中定义的每个方法都在这个定义表中有一个对应的记录项。

    FieldDef 模块中定义的每个字段都在这个定义表中有一个对应的记录项

    ParamDef 模块中定义的每个参数都在这个定义表中有一个对应的记录项

    PropertyDef 模块中定义的每个属性都在这个定义表中有一个对应的记录项

    EventDef 模块中定义的每个事件都在这个定义表中有一个对应的记录项

      常用的引用元数据表:

    AssemblyRef 模块中引用的每个程序集在这个表中都有一个对应的记录项

    ModuleRef 模块引用的每个类型可能是由别的PE模块实现的,所有那些模块在这个表都有一个记录项

    TypeDef 模块引用的每个类型在这个表中都有一个对应的记录项

    MemberRef 模块引用的每个成员都在这个表中有一个对应的记录项

    清单元数据表:

    AssemblyDef 如果该模块标示的是一个程序集,就在这个元数据表中包含单个记录项。该记录项列出了程序集名称(不含路径和扩展名)、版本(major,minor,build和revision)、语言文化(culture)、一些标志(flag)、哈希算法以及发布者的公钥。

    FileDef 作为程序集一部分的每个PE文件和资源文件在这个表中都有一个对应的记录项。

    MainifestResourceDef 作为程序集一部分的每个资源在这个表中都有一个对应的记录项

    ExportedTypesDef 从程序集的所有PE模块中导出的每个public类型中在这个表中都有一个对应的记录项。

    4.通用类型系统(Common Type System)

    CTS定义了一个类型库,无论时Visual Basic.NET还是c#,他们的类型系统大体类似。因此.NET将各种不同的编程语言的数据类型进行抽象,就有了CTS。虽然每种编程语言都有自己的类型系统,但编译后都会转成CTS类型。不同的语言编写的程序直间可以相互操作。Vb的integer而C#的System.Int32都对应CTS的System.Int32类型。

    CTS类型主要分成两大类:引用类型和值类型,这两个类型可以相互转换,方法是装箱和拆箱。CTS类型最终继承自Object。

    5.公共语言规范(Common Language Specifiaction,CLS)

    为了创建很容易从其他编程语言中访问的类型,只能从自己的编程语言中挑选其他所有语言都确定支持的那些功能,Microsoft定义了一个“公共语言规范”(Common Language Specifiaction,CLS),它详细定义了一个最小功能集。

  • 相关阅读:
    多态与封装
    [Vue] karme/jasmine/webpack/vue搭建测试环境
    [Vue] vue中setInterval的问题
    hosts文件的作用
    [Nodejs] node写个helloworld
    [JavaScript] Cookie,localStorage,sessionStorage概述
    [Vue] vuex进行组件间通讯
    常用工具网站(记事,图表等)
    npm安装github包的方式
    常用的练习网站
  • 原文地址:https://www.cnblogs.com/laoqi/p/4087540.html
Copyright © 2020-2023  润新知