众所周知,DotNet框架是非常庞大的,光项目创建时的种类就有WPF,WCF,WF这三种最新的技术,还有以前的Web,WinForm,Service,Mobile等等.
这么复杂和庞大的框架,用文字来描述是远远不够的,所以我准备写一系列图文并茂的文章,把我所知道的所有Net框架中的东西全部串联起来,希望可以给大家一个DotNet框架的知识图,本人能力有限,难免有理解错误和表达不清的地方,望大家谅解并指教.        
      好,我们现在就开始第一张图的学习,再所有的文章写完后,大家将会得到一个完整的框架图。

下面我会做出对这个图的解释,请大家对照图来一步一步的学习。

1.CTS  和 CLS :

CTS:公共类型系统。他是一个集合{类,接口,委托,结构,枚举,类型成员,基本数据类型},只有符合CTS的类型才能在CLR上运行。 简单点说就是VB,C#,C++等DotNet支持的语言的类型集合。这些东西大部分都定义在System.dll中,我们将在下一篇来讨论 system.dll。
    CLS:公共语言规范。从图上可以看出,他是CTS的子集,为什么他是子集呢?因为在C#中有Ulong而VB中就没有。看以下代码

    public class Test
    {
        public ulong Add(ulong a, ulong b)  //如果某语言特有的类型,作为返回类型和参数则不遵循CLS
        {
            return a + b;
        }
        public int Add(int a, int b)   //但是作为局部变量则仍然遵循CLS
        {
            ulong x;
            return a + b;
        } 
    }

在默认.NET开发平台上是不会执行CLS检查的,如果要开启可以在AssemblyInfo.cs中加入代码

[assembly:System.CLSCompliant(true)]

大家可能要问,为什么要遵循CLS呢?答案在后面给出。

2. CIL,元数据和程序集清单

CIL:公共中间语言。我们大家都知道,在.Net中使用VB写一个DLL,那么在C#的项目中也可以调用,反之亦然。如何实现的呢?就 是CIL了,前面我们说过CLS的作用,并且留下了为什么要遵守CLS的疑问,就是因为.net编译生成的dll或Exe,其实主要是CIL,原数据和程 序集清单这三部分组成。那么要想VB和C#共享,就要有一个通用的规范,它就是CLS了,呵呵,现在明白为什么要CLS了吧,如果你不去遵守CLS也是可 以的,但是就不能保证你的dll的复用性了。
    元数据:.net的反射,远程处理,序列化这些东西都很神秘吧,其实他们都是原数据的功劳,你所定义的类,方法,方法的返回类型和参数,属性,字段,都会被编译成元数据,然后当你序列化或反射时,拿这些原数据给你生成一个类。
    程序集清单:这个就容易理解了,你添加的dll引用的信息全都在这里。下面是一个Dll中的信息。

原代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
    public class Test
    {
        public ulong Add(ulong a, ulong b)  //如果某语言特有的类型,作为返回类型和参数则不遵循CLS
        {
            return a + b;
        }
        public int Add(int a, int b)   //但是作为局部变量则仍然遵循CLS
        {
            ulong x;
            return a + b;
        }
    }
}

使用.Net自带的 ILDisassembler.exe 察看的IL:

.class public auto ansi beforefieldinit ConsoleApplication3.Test
       extends [mscorlib]System.Object
{
 .method public hidebysig instance int32 
          Add(int32 a,
              int32 b) cil managed
  {
    // Code size       4 (0x4)
    .maxstack  8
    IL_0000:  ldarg.1
    IL_0001:  ldarg.2
    IL_0002:  add
    IL_0003:  ret
  } // end of method Test::Add
}

就是这三样东西组成的dll,让.net实现了远程处理的remoting,反射,序列化和跨平台,跨语言。关于跨平台的问题,我们在下一篇讨论。。

图解DotNet框架之一:编译与执行引擎(上)相关推荐

  1. 图解DotNet框架系列

    图解.Net框架系列(索引贴) (声明:本系列已完成,故索引帖重发) 众所周知,DotNet框架是非常庞大的,光项目创建时的种类就有WPF,WCF,WF这三种最新的技术,还有以前的Web,WinFor ...

  2. 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎

    第七章 虚拟机类加载机制 7.1 概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 在J ...

  3. 百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路!

    作者| 阿里文娱高级专家 随方, 阿里文娱开发专家 轩成 责编 | 屠敏 头图 | CSDN 下载自视觉中国 背景 在阿里的业务中,有广泛的算法应用场景,也沉淀了相关的算法应用平台和工具:基础的算法引 ...

  4. Java-虚拟机-执行引擎/解释器/编译

    JVM中有两种解释器 1.C++字节码解释器:使用C++代码模拟JVM指令,例如iload,istore等 2.模板解释器(JIT编译器):将程序中固定不变的指令,或者常用的代码段,翻译成机器代码,保 ...

  5. 执行引擎的工作过程、Java代码编译和执行的过程、解释器、JIT编译器

    执行引擎概述 执行引擎是Java虛拟机核心的组成部分之一. "虚拟机"是-一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接 ...

  6. 虚拟机系列 | 执行引擎和垃圾回收

    一.执行引擎 应用程序经过编译,转换为字节码文件,字节码加载到内存空间并不能直接在操作系统上执行,执行引擎作为Java虚拟机核心的组成部分,作用就是将字节码指令解释/编译为对应系统平台上的本地机器指令 ...

  7. Java执行引擎工作原理:方法调用

    Java执行引擎工作原理:方法调用 方法调用如何实现 函数指针和指针函数 CallStub源码详解 Git链接(有HotSpot源码) 1 方法调用如何实现 计算机核心三大功能:方法调用.取指.运算 ...

  8. 【愚公系列】2023年01月 .NET CORE工具案例-CS-Script脚本执行引擎

    文章目录 前言 一.CS-Script脚本执行引擎 1.安装包 2.具体使用 2.1 CompileMethod 2.2 LoadMethod 2.3 LoadCode 2.4 CompileCode ...

  9. JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?

    因为热爱所以坚持,因为热爱所以等待.熬过漫长无戏可演的日子,终于换来了人生的春天.他逐渐被人熟知,被人喜爱 三年前,在苏州园区某个国企面试,第一道题目便是:JVM是什么吗?然后就是拿着笔试题目被面试官 ...

最新文章

  1. 分布式通信框架 - rmi
  2. 如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3
  3. js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...
  4. 12月21 vs2012 数据类型
  5. jmeter--轻量级接口自动化测试框架
  6. JAVA web项目报错no sigar-x86-winnt.dll in java.library.path
  7. html5基础知识点表单
  8. 【渝粤题库】陕西师范大学200851 微机实用技术
  9. oracle数据库如何授权收费吗,如何减少Oracle数据库的License和支持费用
  10. 干货分享:Neutron的PPT,帮助你理解Neutron的各种细节
  11. POI技术—用于java开发解析excel的抽象类
  12. HDU 2665 Kth number(主席树静态区间第K大)题解
  13. 华为云计算IE证书培训费加考试费要2.5左右,值不值得考啊?
  14. 社会工程学主要学习内容及书籍推荐
  15. 计算机机房岗位管理制度,机房管理规定-机房管理制度.doc
  16. STM32 SIM800C SIM868 连接OneNet 以及远程控制流程详解
  17. WordPress星级评分插件KK Star Ratings评分插件教程
  18. 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
  19. 软件测试之语音识别(ASR)测试
  20. “硬解码”与“软解码”的区别

热门文章

  1. 在线网页快捷方式创建工具
  2. python科学坐标系绘制分析_Python电子教案9-1-科学计算和可视化.ppt
  3. 防火墙(ASA)高级配置之URL过滤、日志管理、透明模式
  4. Binary Tree Paths
  5. 一口气完成electron的入门学习
  6. c语言中基本数据类型printf()对应格式
  7. 设计模式 - Prototype模式(原型模式)
  8. linux下安装在线mysql,嵌入式 Linux下安装Mysql离线和在线安装
  9. :https web服务器ssl认证项目,Https自定义证书引入问题(2)
  10. 八个方便C#开发的省时的国外工具