zoukankan      html  css  js  c++  java
  • CLR Via C#: CLR 的执行模型

    CLR(Common Language Runtime)公共语言运行时:是一个可由多种编程语言使用的“运行时”。

    编译源代码文件的过程:

    • C# 源代码文件 -》 C# 编译器-》托管模块(中间语言和元数据)
    • Basic 源代码文件 -》 Basic 编译器-》托管模块(中间语言和元数据)

    托管模块的各个组成部分:

    • PE32 或PE32+头
    • CLR头
    • 元数据 - 是一组数据表,其中一些数据表描述了模块中定义的内容,比如类型及成员。还有一些数据表描述了托管模块引用的内容,比如导入的类型及其成员。
    • IL(中间语言)代码

    判断是否已安装.NET Framework, 只许判断C:WindowsSystem32目录中是否存在文件mscoree.dll。 一台及其可能同时安装好几个版本的.NET Framework, 需要到注册表中查看:

    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET 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. 非托管代码可使用托管类型(服务器)
  • 相关阅读:
    NOIP2010 关押罪犯
    NOIP2010 乌龟棋
    static属性
    数组的拷贝
    数组在类中的声明与创建
    两个数组之间的引用
    java数组实现买彩票(二个一维数组的比较思想)
    java数组实现买彩票(通过标识符进行判断的思想)
    java数组实现买彩票(重复则重新遍历查询思想)
    java数组实现买彩票(平移覆盖思想)
  • 原文地址:https://www.cnblogs.com/LilianChen/p/7655273.html
Copyright © 2011-2022 走看看