基本信息

CIL和JIT

  • CIL通用中间语言
  • JIT just-in-time使得CIT代码仅在需要时才编译

程序集

  • 包含可执行文件.exe和库函数.dll和资源文件,不必把程序集集中到一个地方,全局程序缓存
  • 程序集完全自描述的,逻辑单元而不是物理单元
  • 可执行代码和库代码使用相同程序集结构,可执行文件多了一个主程序入口点。
  • 程序集的一个重要特征是它们包含元数据描述了对应代码中定义的类型和方法。

CLR

公共语言运行库CLR:包含实时编译器JIT,在程序运行时,JIT编译器会从IL代码生成本地代码,其他部分是垃圾回收器GC,调试器扩展和线程实用工具。垃圾回收器负责回收内存,调试扩展器允许在不同编程语言之间启动调试会话,线程实用工具负责在底层平台创建线程。

  • 管理着正在执行的代码包括管理内存,处理安全以及跨语言调试
  • 代码托管最重要的是内存回收机制
  • winform基于像素
  • wpf基于pirectX

CLR执行应用程序之前,编写好源代码都需要编译,编译分为两个阶段

  • 将源代码编译成microsoft中间语言IL
  • CLR将I编译成平台专用的的本地代码

clr还有一个类型加载器的类型系统,类型加载器负责从程序集中加载类型。

编译过程

  • .net兼容语言编写程序,托管语言
  • 将代码编译为中间代码CIL,这未必是单文件,可以有多个源代码文件,再把链接带一个程序集中,称之为链接
  • 使用JIT编译为本机代码
  • 在托管的CLR环境下运行本机代码

基本语法

注释

  • /* */和一行//
  • ///可以通过配置,将这些注释提取出来组成文档文件

命名空间

代码大纲功能

  • #region Using directives
  • #endregion,大纲的名字为Using directives

变量

  • 先声明后使用

变量初始化:变量是类或结构中的字段,如果没有显式初始化,则创建这些变量时,其默认值就是0.方法的局部变量必须在代码中显示初始化。

  • 整数

    • sbyte System.SByte -128~127
    • byte System.Byte 0~255
    • short System.Int16 -32768~32767
    • ushort System.UInt16 0~65535
    • int System.Int32 -21亿~21亿
    • uint System.UInt32 42亿
    • long System.Int64 19位数字
    • ulong System.UInt64 20位数字
  • 浮点类型

    • 位是最小数据单位,只能表示0-1
    • 字节,8个二进制位构成1个字节,是存储空间的基本计量单位
    • 字:由若干字节构成,不同计算机有不同的字长,8位计算机一个字等于一个字节,16位一个字等于两个字节,字是计算机数据处理和运算的单位
    • 1kb等于1024个字节
    • 1M等于1024KB
    • 1G等于1024M
    • 1T等于1024G
    • float System.Single 4字节
    • double System.Double 8个字节
    • decimal System.Decimal 16个字节
  • 布尔和文本

    • char System.Char Unicode 0~65535 2个字节
    • bool System.Boolean 1个字节
    • string System.String
  • 转义字符

    • ' 单引号 0x0027
    • '' 双引号 0x0022
    • \ 反斜杠 0x005c
    • \0 空 0x0000
    • \a 警告 0x0007
    • \b 退格 0x0008
    • \f 换页 0x000C
    • \n 换行 0x0000A
    • \r 回车 0x000D
    • \t 水平制表符 0x0009
    • \v 垂直制表符 0x000B
    • @转义字符,避免大量使用\
  • 全局变量:Program.全局变量,在声明变量前要进行初始化

  • 常量:

    • 常量必须初始化,指定值后不能更改。
    • 常量总是隐式静态的,
  • 值类型和引用类型:值类型存储在栈中,应用类型存储在中。值类型和引用类型互换要经过装箱拆箱,在传递函数参数时,值类型会进行复制,而引用相当于传递指针,返回值相同。引用类型由垃圾回收器进行回收,值类型不需要,超出其作用域就会在内存中删除。

  • ref:如果是结构类型使用ref传递参数,则变成传递引用,但如果是引用类型,即使参数在函数中变化了引用,新的应用还是会传递回去。ref传递的值要先初始化。

  • out:用法基本和ref一样,但传入的值只需要定义

  • 可空类型:int? 和int,唯一的多开销是一个可以确定它是否为空 的布尔成员,值可以直接转换可空,int?=int;可空转换成值需要强制int=(int)int?;但如果为空会生成一个异常,最好的方法是int=int?.hasvalue?int?.value:-1;可以转换成较短短语int=int??-1

  • 枚举也是值类型:默认情况下,枚举是int,也可以改变成其他整数类型,强制转换将int转换成枚举,当分配给常量是不同位时,flags属性需要枚举设置,获得所有枚举,var day in Enum.GetName(typeof(Color));

  • 结构:值类型,不能继承,每个结构都自动由ValueType派生。

基本运算符