C#核心编程结构,2

此系列文章根据《C#与.NET 3.5高级程序设计(第四版)》进行笔记。

  1. 函数参数修饰符:
    • (无):按值传递
    • out:被此修饰符修饰的参数是作为输出的参数,如add(int a,int b,out int sum),注意两点:1、方法内sum必须被赋值,否则出错。2、out用法有一个好处就是可定义多个输出参数,使得一个函数可有多个返回值。如add(int a,int b,out int sum,out int count)。输出参数为按引用传递。
    • params:如add(params double[] values),调用方法时只需这么做而不用创建数组:add(0.7,8.99,2)。其实CLR还是会创建数组。只是方便调用者。
    • ref:按引用传递。ref和out有区别。ref的参数在调用方法前需初始化,out的参数在调用方法前无需初始化,因为out参数在方法体内必须被赋值,否则出错。P84。这个区别可理解为:out参数是将作为函数的返回值来用的,而ref只是希望将参数按引用传递传入参数进行处理,那么out参数作为返回值不用在调用方法前初始化,而ref参数就需要在处理前即调用方法前初始化。
  2. 某个变量如userid,userid.GetType(),是获得此变量的完全限定名。因为所有的类型都继承自Object,object有GetType方法。
  3. 熟悉数组的基本操作。P88
  4. 枚举类型enum。可控制枚举的底层存储:enum EmpType:byte {...,...} ,EmpType后面的:byte表示该枚举底层存储为byte类型,即0-255.注意枚举类型只能存储数字,即int,short,long,ushort等等。初始化枚举类型的形式:EmpType em=EmpType.Manager;一个变量接受枚举中的其中一个值。P93
  5. 结构类型struct。理解为轻量级的类类型。
  6. 值类型与引用类型。1)、将一个结构体复制给另一个结构体时,其中一个改变里面的值,另一个不随着改变。而类的话,其中一个改变,另一个会随着改变,即两个引用指向同一个托管堆的对象。2)、若结构体A中包含一个类对象,当将一个A实例复制到另一个实例,两个实例中值类型保存两个副本,而引用类型保存一个副本。3)、理解按值传递引用类型和按引用传递引用类型。按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能改变所引用的对象;按引用传递引用类型,被调用者可能改变对象的状态数据的值和所引用的对象。 P99.
  7. c#的可空类型。按照规则,null用来建立一个空的对象引用,所以值类型永远不可以被赋值为null。而引用类型可被赋值为null。为了让值类型也可赋值为null。可采用以下方法:bool? a=null;编译通过,即在数据类型后加“?”,这种做法只对值类型有效。?实际上是System.Nullable的简写。可空类型的好处在于,数据库的字段有可能为null,若为值类型增加null值,可赋值为null,通过判断是否为null来判断。还有其中要注意的一点是:??。??的用法如下:int? mydata=dr.GetData() ?? 100;意义为当返回值为null时,赋值为100。

8.c#类的默认修饰符是 internal,类成员默认的访问修饰符是private

9. 对于参数类型为委托的参数,可以传入委托类型和方法。