编译:
C#编译器把一系列.cs扩展名的源代码文件编译成程序集。程序集是.NET中的最小打包和部署单元。一个程序集可以是一个应用程序,或者一个库。一个普通的控制台程序或Windows应用程序是一个.exe文件,包含一个Main方法。一个库是一个.dll文件,它相当于一个没有入口的.exe文件。库是用来被应用程序或其他库调用的。.NET Framework就是一组库
标识符和关键字:
如果使用关键字作为标识符,可以在关键字前面加上@前缀。
@并不是标识符的一部分,所以@myVariable和myVariable是一样的
8位和16位整数
8位和16位整数指的是byte、sbyte、ushort、short。这些类型缺少它们自己的算术运算符,所以C#隐式把它们转换成所需的大一些类型。当试图把运算结果赋给一个小整数类型时会产生编译错误,必须添加一个显示转换使这条语句通过编译。
Char:
C#中的char表示一个Unicode字符,它占用2个字节
连接字符串:
+运算符连接两个字符串:
string s = “a” +“b”;
右面的操作对象可以是非字符串类型的值,在这种情况下这个值的ToString方法将会被调用。
既然字符串是不变的,那么重复的用+运算符来组成字符串是低效率的;一个更好的解决方案是用System.Text.StringBuilder类型。
字符串类型:
string类型是引用类型而不是值类型,但是它的相等运算符确遵守值类型的语义
在字符串前加前缀@,则这个字符串不支持转义字符。
数组:
数组中的元素总是存储在连续的内存块中。
数组的Length属性返回数组中的元素数量。一旦数组被建立,它的长度将不能被更改,System.Collection命名空间和子命名空间提供了像可变数组和字典等高级数据结构。
所有的数组都继承自System.Array类,它提供了所有数组的通用服务。
多维数组:
分为矩形数组和锯齿形数组。矩形数组代表了n维的内存块,而锯齿形数组则是数组的数组。
1、矩形数组:
矩形数组声明时用逗号分隔每个维度。下面的二维数组的维度是3*3
int[,] matrix = new int[3,3];
2、锯齿形数组:
锯齿形数组在声明时用两个方括号表示每个维度。例如:
int[][] matrix = new int [3][];
内层维度在声明时可不指定。不同于矩形数组,锯齿形数组的每个内层数组都可以是任意长度;每个内层数组隐式初始化成null而不是一个空数组,每个内层数组必须手工创建。
默认值:
所有类型实例都有默认值。
能够对任何类型适用default关键字来获得其默认值:
decimal d = default(decimal);
params修饰符:
params修饰符在方法最后的参数中指定,它使方法接受任意数量的指定类型参数。参数类型必须声明为数组。
可选参数:
方法、构造方法和索引器都可以被声明成可选参数,只要在声明时提供默认值,这个参数就是可选参数,可选参数在调用方法时可以被省略;
可选参数的默认值必须由常量表达式或无参数的值类型构造方法指定。可选参数不能被标记为ref或out。
跳转语句:
C#的跳转语句有break、continue、goto、return和throw;
1、break:
break语句用来结束循环体或switch语句体的执行
2、continue:
continue语句放弃循环体中其后的语句,继续下一轮循环
3、goto:
goto语句用于转移执行到语句块中的另一个标签处
4、return
return语句退出方法,如果这个方法有返回值,同时必须返回方法指定返回类型的表达式
5.throw
throw语句抛出异常来表示有错误发生
const和readonly的区别:
const:
1、const是常量的意思,其定义的变量只能读取不能更改,且只能在定义时初始化,不能在构造函数和其他属性与方法中初始化
2、const定义的字段属于类访问,类似于静态变量,只能通过类名来访问
3、const只能定义值类型与字符串,若定义引用类型的变量,只能初始化为null
readonly:
readonly是只读的意思,其定义的变量在运行期间只能读取不能更改,分为实例只读变量和静态只读变量
实例只读变量:
1、实例只读变量在定义时或者实例化构造函数中初始化,通过对象访问
2、static readonly静态只读变量可以在定义时或者静态构造函数中初始化,通过类名访问
const与readonly相同点:运行期间都只能读取不能更改
const 与readonly不同点:
1.const定义时即初始化,运行期间无法再初始化;readonly除了在定义时可以初始化外,还能在运行期间的构造函数中初始化,实例只读变量只能在实例构造函数中初始化,静态只读变量只能在静态构造函数中初始化
2.const定义的变量只能通过类名称访问,而readonly会根据其是否定义为静态类型而分别通过对象与类名称访问
3.const只能定义值类型与字串,若定义引用类型则初始化值必须为null,而readonly无此限制,可以定义引用类型时初始化为null,在对应的构造函数中再重新初始化
CLR属性访问器的实现:
C#属性访问器在系统内部被编译成名为get_XXX和set_XXX的方法:
public int get_Current(){..........}
public int set_CurrentPrice(decimal value){...........}
析构(终止器):
析构是只能在类中使用的方法,它在垃圾收集器回收没有被应用的对象前执行,终止器的语法是类名加前缀~:
class Class1{
~Class1(){............}
}
实际上,这是重载对象的Finalize方法的C#语法,编译器将其扩展成如下的方法声明:
protected override void Finalize(){
...............
base.Finalize();
}
终止器允许使用以下修饰符:
非托管代码修饰符 unsafe