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规定,一个类型可以包含零个或者多个成员:

  1. 字段(Field)—— 一个数据变量,是对象状态的一部分。字段根据名称和类型来区分
  2. 方法(Method)—— 一个函数,能针对对象执行一个操作,通常会改变对象的状态。方法有一个名称、一个签名以及一个或多个修饰符。
  3. 属性(Property)—— 对于调用者,该成员看起来像一个字段。但对于类型的实现者,它看起来像是一个方法(或者两个方法,称为getter 和setter)。
  4. 事件(Event)—— 事件在对象以及其他相关对象之间实现了一个通知机制。例如,利用按钮提供的一个事件,可以再按钮被单击之后通知其他对象。

CTS 还指定了类型可视性规则以及类型成员的访问规则:

  1. private: 成员只能由同一个类(class)类型中的其他成员访问
  2. family:成员可由派生类型访问,不管那些类型是否在同一个程序集
  3. family and assembly:成员可由派生类型访问,但这些派生类型必须是在同一个程序集中定义的
  4. assembly:成员可由同一个程序集中的任何代码访问
  5. family or assembly:成员可由任何程序集中的派生类型访问
  6. public: 成员可由任何程序集中的任何代码访问

除此之外,CTS还为类型继承、虚方法、对象生存期等定义了规则。

CTS规定:所有类型最终必须从预定义的System.Object类型继承。System.Object类型允许做下面这些事情:

  1. 比较两个实例的相等性
  2. 获取实例的哈希码
  3. 查询一个实例的真正类型
  4. 执行实例的浅(按位)拷贝
  5. 获取实例对象的当前状态的一个字符串表示

于非托管代码的互操作性 - CLR 支持三种互操作情形:

  1. 托管代码能调用DLL中的非托管函数
  2. 托管代码可使用现有的CMO组件(服务器)
  3. 非托管代码可使用托管类型(服务器)

最新文章

  1. GJM :Unity集成Leap Motion
  2. WebSphere MQ Explorer的sqlserver的jdbc
  3. 使用Angularjs的ng-cloak指令避免页面乱码
  4. 【故障处理】ORA-28040: No matching authentication protocol
  5. 【OpenCV】opencv3.0中的SVM训练 mnist 手写字体识别
  6. Windows2000安装Winform Clickonce提示升级系统版本的解决方案
  7. javascript之with的使用 弊端
  8. Pomelo服务器琐碎方法
  9. 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!
  10. hdu1429之BFS
  11. 网络基础知识HTTP(1) --转载
  12. HTML高级选项卡(1)————表标签
  13. Java-设计模式-单例模式-饿汉模式、懒汉模式
  14. JS模式---发布、订阅模式
  15. 201521123055 《Java程序设计》第12周学习总结
  16. sprintf的用法
  17. C#版 - Leetcode 13. 罗马数字转整数 - 题解
  18. 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
  19. MySQL学习笔记(二)性能优化的笔记(转)
  20. JS简单表单验证

热门文章

  1. php常用函数htmlspecialchars、strip_tags、addslashes解析
  2. 理解SetCapture()和ReleaseCapture()及GetCapture()作用
  3. git克隆某一个branch
  4. 线段树Final版本
  5. bzoj 3439: Kpm的MC密码 Trie+动态开点线段树
  6. Exchange邮箱设置,android手机和mac book
  7. BZOJ1972:[SDOI2010]猪国杀
  8. 清理:db上面的过期的binlog,释放磁盘空间。 (转)
  9. 我的SIP开发之路
  10. 2440移植内核到uboot上,打印乱码