1, 托管执行和公共语言基础结构:
处理器不能直接解释一个程序集。程序集采用的是另一种语言,即公共中间语言(Common Intermediate Language, CIL),或者简称为中间语言(IL)。
C#编译器只是将C#源代码文件转换成这种中间语言。为了将CIL代码转换成处理器能够理解的机器码,还要执行一个额外的步骤(该步骤通常是在执行时完成的)。这个步骤涉及C#程序执行中的一个重要元素:VES(Virtual Execution System, 虚拟执行系统)。VES偶尔也被称为运行时,它根据需要来编译CIL代码,这个过程称为即时编译或者JIT编译(Just-In-Time Compilation)。
===================================================================================================================================
2, C#和.NET版本:
截止目前为止,微软对.NET Framework进行了5次大的升级,但C#编译器只进行了4次大的升级。
C#1.0和.NET Framework 1.0/1.1 (Visual Studio 2002/ 2003)
C#2.0和.NET Framework 2.0 (Visual Studio 2005)
.NET Framework
C# 3.0 和 .NET Framework 3.5 (Visual Studio 2008)
C# 4.0 和 .NET Framework 3.5 (Visual Studio 2010)
===================================================================================================================================
3, 数据类型:
8种整数类型:
类型 大小 BCL名称
sbyte 8 bit System.SByte
byte 8 bit System.Byte
short 16 bit System.Int16
ushort 16 bit System.UInt16
int 32 bit System.Int32
uint 32 bit System.UInt32
long 64 bit System.Int64
ulong 64 bit System.UInt64
注: C#的所有基本类型都有一个短名称和一个完整名称。完整名称对应于BCL种命名的类型。从编译器的角度看,两种名称是完全一样的,最终都将生成同样的代码。
2种浮点数:
类型 大小 BCL名称 有效数字
float 32 bit System.Single 7
double 64 bit System.Double 15 - 16
注:浮点数的精度是可变的。如读取本来是0.1的一个浮点数,那么可能很容易读取成0.099 999 999 999 999 999或0.100 000 000 000 000 000 1或者其他非常接近0.1的一个数
1种用于金融计算的十进制浮点类型:
类型 大小 BCL名称 有效数字
decimal 128 bit System.Decimal 28 - 29
注:与浮点数不同,decimal类型保证范围内的所有十进制数都是完全准确的。所以,对于decimal类型来说,0.1就是0.1,而不是一个近似值
1种布尔类型:
类型 取值 BCL名称
bool true / false System.Boolean
1种字符类型:
char 16 bit System.Char
其他的转义字符,常用的记住就好了,也没啥可复习的。
=================================================================================================================================
string类:
string的静态方法:
static string Format(string format, ...);
static string Concat(string str0, string str1);
static int Compare(string str0, string str1);
string的实例方法:
bool StartsWith(string value);
bool EndsWith(string value);
string ToLower();
string ToUpper();
string Trim();
string Trim(...);
string TrimEnd();
string TrimStart();
string Replace(string oldValue, string newValue);
System.Environment.NewLine;
System.Console.WriteLine("Hello World!"); === System.Console.Write("Hello World!" + System.Environment.NewLine);
string的Length属性
字符串是不可变的(immutable)
==================================================================================================================================
StringBuilder类:System.Text.StringBuilder
==================================================================================================================================
null和void
隐式类型的局部变量(implicitly typed local variable),关键字var。
C#3.0添加var的目的是支持匿名类型(anonymous type),例如:
var patent1 = new { Title="Bifocals", YearOfPublication="1987"};
Console.WriteLine("{0},{1}",patent1.Title, patent1.YearOfPublication);
值类型和引用类型:
可空类型
使用System.Convert进行类型转换:
System.Convert只支持预定义数量的类型,而且是不可扩展的。
System.Convert.ToDouble();
System.Convert.ToBoolean();
TryParse():
从C#2.0(.NET 2.0)开始,所有基本数值类型都包含一个静态的TryParse()方法。
{
double number;
string input;
input = Console.ReadLine();
if( double.TryParse(input, outnumber ) {
//
}
}
二维数组:int[,] arr;
交错数组:int[][] arr; // 交错数组要求对数组中的数组进行实例化。
int[][] cells = {
new int[]{1, 2, 3},
new int[]{1, 2},
new int[]{1, 2, 3, 4}
};
System.Array.Sort();
System.Array.BinarySearch(); //在使用BinarySearch之前,有必要对数组进行排序。
System.Array.Reverse();
System.Array.Clear(); // 该方法不删除数组元素,而且不将长度设为0,。数组大小是固定的,不能修改。所以,Clear()方法将数组中的每一个元素设为其默认值(false, 0, null)。
数组的实例方法:
GetLength()
Rank(); // 获取数组的维数
Clne()
字符串作为数组使用:
string palindrome = Console.ReadLine();
char[] temp = palindrome.ToCharArray();
System.Array.Reverse(temp);
================================================================================================================================
运算符和控制流
线程安全的递增和递减:P68
对于简单的递增和递减运算,一个代价没有那么高的替代方案是使用由System.Threading.Interlocked类提供的线程安全方法Increment()和Decrement()方法。这两个方法依赖于处理器的功能来执行快速的、线程安全的递增和递减运算。
空结合运算符:
从C#2.0开始,执行空值检查的条件运算符有了一个简化语法,称为空结合运算符(null coalescing operator), 它检查一个表达式是否为null,如果为null,就返回第二个表达式的值。例如: expression1?? expression2;
C#预处理指令:控制流语句中的条件表达式是在运行时求职的,而C#预处理器指令是在编译时调用的。P99
#if、 #elif、#else、#endif、#define、#undef、#error、#warning、#pragma、#line、#region、#endregion
=================================================================================================================================
方法和参数:
编译器认为所有的命名空间都在一个级别上。例如:System.Collections.Generics似乎被包含在System.Collections命名空间内部,但对于编译器来说,它们是两个完全独立的、完全不同的命名空间。
===================================================================================================================================
有些乱和不完整,有时间会整理,并补充
---------参考《Essential C# 4.0》