CLR Via C#: CLR 的执行模型
CLR(Common Language Runtime)公共语言运行时:是一个可由多种编程语言使用的“运行时”。
编译源代码文件的过程:
- C# 源代码文件 -》 C# 编译器-》托管模块(中间语言和元数据)
- Basic 源代码文件 -》 Basic 编译器-》托管模块(中间语言和元数据)
托管模块的各个组成部分:
- PE32 或PE32+头
- CLR头
- 元数据 - 是一组数据表,其中一些数据表描述了模块中定义的内容,比如类型及成员。还有一些数据表描述了托管模块引用的内容,比如导入的类型及其成员。
- IL(中间语言)代码
判断是否已安装.NET Framework, 只许判断C:\Windows\System32目录中是否存在文件mscoree.dll。 一台及其可能同时安装好几个版本的.NET Framework, 需要到注册表中查看:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup
通用类型系统(Common Type System)CTS规定,一个类型可以包含零个或者多个成员:
- 字段(Field)—— 一个数据变量,是对象状态的一部分。字段根据名称和类型来区分
- 方法(Method)—— 一个函数,能针对对象执行一个操作,通常会改变对象的状态。方法有一个名称、一个签名以及一个或多个修饰符。
- 属性(Property)—— 对于调用者,该成员看起来像一个字段。但对于类型的实现者,它看起来像是一个方法(或者两个方法,称为getter 和setter)。
- 事件(Event)—— 事件在对象以及其他相关对象之间实现了一个通知机制。例如,利用按钮提供的一个事件,可以再按钮被单击之后通知其他对象。
CTS 还指定了类型可视性规则以及类型成员的访问规则:
- private: 成员只能由同一个类(class)类型中的其他成员访问
- family:成员可由派生类型访问,不管那些类型是否在同一个程序集
- family and assembly:成员可由派生类型访问,但这些派生类型必须是在同一个程序集中定义的
- assembly:成员可由同一个程序集中的任何代码访问
- family or assembly:成员可由任何程序集中的派生类型访问
- public: 成员可由任何程序集中的任何代码访问
除此之外,CTS还为类型继承、虚方法、对象生存期等定义了规则。
CTS规定:所有类型最终必须从预定义的System.Object类型继承。System.Object类型允许做下面这些事情:
- 比较两个实例的相等性
- 获取实例的哈希码
- 查询一个实例的真正类型
- 执行实例的浅(按位)拷贝
- 获取实例对象的当前状态的一个字符串表示
于非托管代码的互操作性 - CLR 支持三种互操作情形:
- 托管代码能调用DLL中的非托管函数
- 托管代码可使用现有的CMO组件(服务器)
- 非托管代码可使用托管类型(服务器)
CLR Via C#: CLR 的执行模型的更多相关文章
- CLR via C# 摘要一:托管程序的执行模型
托管程序的执行模型大致如下: 编译源代码为程序集(dll或exe文件),程序集包括了记录相关信息的元数据和IL代码 执行程序集文件时,启动CLR,JIT负责把IL编译为本地代码并执行 IL是微软推出的 ...
- CLR执行模型
好好学习底层运行机制,从CLR via C# 开始. CLR的执行模型: CLR:Common Language Runtime,是一个可由多种编程语言使用的"运行时".CLR的核 ...
- 01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型
.Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...
- CLR 的执行模型(2)
第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...
- 第一章 CLR 的执行模型
CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...
- CLR执行模型与常见的几个概念
CLR执行模型与常见的几个概念 一.CLR执行模型 1.1从代码到程序集 CLR执行的模型是从代码开始,经过编译器生成托管模块,默认情况下可以让多个托管模块和资源生成程序集.下图为其大致过程. 1.2 ...
- 第一章 CLR执行模型
发现看过好几遍还是会忘记,因水平有限理解的不是很到位.欢迎各位大神及时指正. CLR执行模型 1.1编译器将源代码编译成托管模块 托管模块:是标准的windows可移植执行体文件(PE32(32位机器 ...
- [Clr via C#读书笔记]Cp1CLR执行模型
Cp1CLR执行模型 本章的概念点 CLR=Common Language Runtime 内存管理,程序集加载,安全性,异常处理和线程同步.CLR是基础,支持着面向它的各种语言.各种语言会被对应的编 ...
- 【深入理解CLR】1:CLR的执行模型
将源代码编译成托管模块 下图展示了编译源代码文件的过程.如图所示,可用支持 CLR 的任何一种语言创建源代码文件.然后,用一个对应的编译器检查语法和分析源代码.无论选用哪一个编译器,结果都是一个托管模 ...
- CLR via C# - CLR模型
博客园对markdown支持不佳,错乱移步Github IO 博文 CLR 的执行模型 模块/程序集 1.模块 托管模块组成部分 PE32/PE32+头 : PE即Portable Executabl ...
随机推荐
- 08 - Django应用第五步
1 自动测试 自动测试与测试的不同在于, 自动测试的测试工作是交给系统完成的 测试也有分类和级别, 有的用于一些细微的细节, 有的是针对整个软件整体 测试会保证一些看起来正常运行的功能在实际的多种情况 ...
- inux命令学习笔记(5):rm 命令
学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令. rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目 录及其下的所 ...
- Hexo 版本
Mac hexo s 启动Hexo服务报错如下: Error: The module '/usr/local/lib/node_modules/hexo-cli/node_modules/.0.8.0 ...
- NodeJS中 Path 模块
var path = require('path'); // 当发现有多个连续的斜杠时,会替换成一个: 当路径末尾包含斜杠时,会保留: // 在 Windows 系统会使用反斜杠. var p = p ...
- HDOJ1171(多重背包)
#include<iostream> #include<cstdio> using namespace std; #define MAX(a,b) (a>b)?a:b + ...
- 开发框架:AdminLTE
ylbtech-开发框架:AdminLTE 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 1. 2. 5.返回顶部 1. https://adminlte.io 2. 6.返 ...
- 使用Sed抽取MySQL安装文档的目录及行号
sed -nr -e '/^2.|^shell/=' -e '/^2.|^shell/p' INSTALL-SOURCE |awk '{if (NR%2==1) x=$1; else printf ...
- ceph-deploy mon add 失败
ceph-deploy mon add 失败 标签(空格分隔): ceph-deploy 运维 问题描述: 现有集群只有一个mon,需要通过ceph-deploy mon add添加两个mon.在ad ...
- 1 ELK 简介
日志主要包括系统日志.应用程序日志和安全日志,系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠 ...
- HttpApplication 对象的创建过程及HttpModule过滤器的内部实现过程
最近通过Reflector学习了一下asp.net内部的原理,做做笔记,方便以后查阅. 先看下HttpApplication 对象的创建过程 从IHttpHandler applicationInst ...