2.1.1中提到c#设计者和CLI设计者为添加具体类型曾争执不休。最后决定只支持每个长度一种类型。c#设计者认为除byte(无符号byte更有用)外其他有符号类型易被接受。p.s.对比C/c++中short是short int的缩写。在c#中short本身是一种实际的数据类型 其BCL名称为System.Int16.
2.1.3中说道decimal具有128位精度。适用于大而精的(类似于金融)计算。虽然精度高但范围小,所以从浮点转到decimal可能会溢出。
2.1.4
//Display the value 42 using a hexadecimal literal System.Console.WriteLine(0x002A); //Display"0x2A" system.Console.WriteLine("0x{0:X}",42);Round-Trip(往返行程)格式化 不会发生最后一位数被丢掉的情况 const double number = 1.61803388749895; double result; string text; text = string.Format("{0}",number); result = double.Parse(text); System.Console.WriteLine("{0}:result != number", result != number); text = string.Format("{0:R}",number); result = double.Parse(text); System.Console.WriteLine("{0}:result == number", result == number); //输出结果为True: result != number //True:result == number 2.2.3逐字字符串字面量(verbatim string literal) 不仅将反斜杠当做普通字符处理,而且会逐字解释所有空白字符。唯一支持的转义字符为" class Triangleclass Triangleclass Triangle { static void Main() { System.Console.Write(@”begin // / / / / /------/ end”); } }
会照原样输出
string的静态方法 Trim()会从外向内找到第一个非空白后停止 去掉字符时会将字符拆成char 从外向内删至第一个非待删字符
字符串是不可变的 所以使字符串 text.ToUpper()要赋值给另一字符串.如果有大量字符串需要修改可使用System.Text.StringBuilder类型
2.4.1中提到c#中值变量放在栈(stack)中,引用类型指向的内存区域称为堆(heap).由于访问引用类型涉及一次额外跳转,速度会慢些。但不像值类型要求相同数据的内存副本,所以内存利用率会好些 32位处理器只需复制一个32比特的地址,64位只需一64位的地址
2.5可空修饰符 由于null不能附给值类型 so C#2.0推出新特性
static void Main() { int? count = null; { //... } while(count == null) }2.6.1check块
public class Program { public static void Main(){ checked{ // int.MaxValue equals 2147483647 int n = int.MaxValue; n = n + 1; System.Console.WriteLine(n); } } }输出时会报溢出的错 若用 unchecked 则会输出-2147483648
2.6.3由于没有定义从字符串到数值类型的隐或显式类型因此需要像Parse()这样的方法。每个值数据类型都包含一个Parse()
string text = "9.11E-31"; float kgElectronMass = float.Parse(text);还有一种特殊类型,可将一种类型换成另外一种
string muddleCText = "278.4375"; double middleC = System.Convert.ToDouble(middleCText); bool boolean = System.Convert.ToBoolean(middleC); System.Convert只支持预定义数量的类型,且不可扩展。 所有类型都支持ToString() 另TryParse()如转换失败不会引发异常 double number; string input; System.Console.Write("Enter a number:"); input = System.Console.ReadLine(); if(double.TryParse(input,out number)) { //converted correctly }else{ System.Console.WriteLine("entered not a valid number"); } 2.7.2 交错数组要求内部每个数组都创建一个数组实例 int [] [] cells = { new int [] {1,0,2,0}, new int [] {1,2,0} } C++非托管 并非总检查你的数组边界