《C#本质论 7.0》读书笔记

  1. 字符串不可变
    所有string类型的数据,不管是不是字符串字面值,都是不可变的。也就是说,不能修改变量最初引用的数据,只能重新赋值,让它指向内存中的新位置。

  2. 托管执行和CLI
    处理器不能直接解释程序集。程序集是公共中间语言(Common Intermediate Language, CLI)又称中间语言(IL)或Microsoft IL (MSIL)。C#编译器将C#源代码文件转换成中间语言。
    为了将CIL代码转换成处理器能理解的机器码,还要完成一个额外的步骤(通常在运行时进行)。该步骤涉及C#程序执行的一个重要元素:VES(Virtual Execution System,虚拟执行系统)。VES也称为运行时(runtime)。它根据具体需要来编译CIL代码,这个过程称为即时编译或JIT编译(just-in-time compilation)。
    如果代码在像“运行时”这样的一个“代理”的上下文中执行,就称为托管代码(managed code),在“运行时”的控制下执行的过程称为托管执行(managed execution)。之所以称为“托管”,是因为“运行时”管理着诸如内存分配、安全性和JIT编译等方面,从而控制了主要的程序行为
    执行时不需要“运行时”的代码称为本机代码(native code)或非托管代码(unmanaged code)

  3. C#的数据类型
    C#有大量类型,而且可合并类型来创建新类型。但C#有几种类型非常简单,是其他所有类型的基础,它们称为预定义类型(predefined type)或基元类型(primitive type)
    C#语言的基元类型包括八种整数类型、两种用于科学计算的二进制浮点类型、一种用于金融计算的十进制浮点类型、一种布尔类型以及一种字符类型。

  4. 八种整数类型

类型大小范围BCL名称后缀
sbyte8位-27~27-1System.SByte
byte8位0~28-1Sytem.Byte
short16位-215~215-1System.Int16
ushort16位0~216-1System.UInt16
int32位-231~231-1System.Int32
uint32位0~232-1System.UInt32U或u
long64位-263~263-1System.Int64L或l
ulong64位0~264-1System.UInt64UL或ul
  1. 两种用于科学计算的二进制浮点类型(了解完浮点数存储回来补全)
类型大小范围BCL名称有效数位后缀
float32位System.SingleF或f
double64System.DoubleD或d
  1. 一种用于金融计算的十进制浮点类型(了解完浮点数存储回来补全)
类型大小范围BCL名称有效数位后缀
decimal128位System.DecimalM或m
  1. 一种布尔类型
类型大小取值BCL名称
bool一个字节true、falseSystem.Boolean
  1. 一种字符类型
类型大小取值BCL名称
char16位0~216-1System.Char

取值范围对应于Unicode字符集。

  1. 字符串
  • 零或多个字符的有限序列称为字符串。
  • string是一种“不可变”类型
  • 逐字字符串,符号@。以@开头的字符串唯一支持的转义序列是“”,代表一个双引号,不会终止字符串。
  • C#不自动连接字符串字面值。必须用+操作符连接(但如果编译器能在编译时计算结果,最终的CIL代码将包含连接好的字符串)。
  • 假如同一字符串字面值在程序集中多次出现,编译器在程序集中只定义字符串一次,且所有变量都指向它。这样一来,假如在代码中多处插入包含大量字符的同一字符串字面值,最终的程序集只反映其中一个的大小。
  • 字符串插值,符号$。逐字和插值可组合使用,但$要在@之前。字符串插值是调用string.Format()方法的语法糖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值