《C#与.NET3.0高级程序设计》读书笔记(一)

来源:互联网 发布:数据科学 r语言实现 编辑:程序博客网 时间:2024/06/04 19:00
第三章:

一:main带的参数可以直接访问args数组,也可以通过Environment类的静态函数GetCommandLineArgs获得。Environment类还包含其他有关应用程序和操作系统的有关信息。

二:类必须在new之后才能用,c#不会将类类型分配到栈上

三:之用定义构造函数,无需定义析构函数,因为c#有垃圾自动收集机制

四:有关“分工:(separation of concerns)。类应该只定义自己相关的功能,调用自己的最好放到另外一个类中。例如HelloClass类和HelloApp类。

五:Console类包含一些控制台相关的设置。输出可以对字符格式化,格式方式见详细资料。也可以用String.Format()总使用格式化字符。

六:成员可见性包括:public,private,protected,internal,protected internal。

七:类型可见性包括:public,internal

八:类成员有默认值,局部变量没有。局部变量要求强制赋值,但是用作输出参数时例外。

九:类成员可在定义时赋值。这在c++中是不可以的。

十:有关常量数据。与C++中不同,C#中const关键字不能用来限定参数或返回值,只能保留用来创建数据或实例一级的数据。所赋的值必须是编译时知道的,被硬编码到程序集中。值得注意的是所有的常量数据隐含为静态的,因此在类型外部引用时要加上它所属的类型名。

十一:只读字段。与const字段不同,只读字段允许定义在编译时不知道的值,同样是赋值后即不能被改变。可以在定义是赋值,也可以放到构造函数中赋值。只读字段不是默认为静态的。

十二:有关static
    1、静态方法。只能用“类名.静态方法名”的方式调用。
    2、静态数据。只分配一次,在所有对象实例之间共享,每一个实例都维护着一份副本。(在内存中占几个空间?)。非静态方法也可以访问修改静态数据。
    3、静态构造函数。用来对静态数据初始化。几个特性:一个给定的类(结构)只能定义一个静态构造函数;静态构造函数仅执行一次,与创建了多少这种类型的对象无关;静态构造函数不带访问修饰符,也不带任何参数;当静态构造函数创建这个类的实例时,或者在调用者访问第一个静态成员之前,运行库会调用静态构造函数;静态构造函数在任何实例级别的构造函数之前执行。
    4、静态类。C#2.0新增。只能包含静态方法和静态数据。不能用new创建。c#2.0之前,防止创建这类数据的方法一是重定义默认构造函数为私有或用abstract将类标记为抽象类型,但是不是类型安全的。

十三:有关参数修饰符
    1、无修饰符。默认按值传递。
    2、out。按引用传递,传递前不需要初始化。
    3、params。传递一组可变个数的相同类型参数,方法只能有一个params修饰符,且必须为最后一个。
    4、ref。按引用传递。传递前必须初始化。

十四:c#有四种循环。for;foreach/in:while;do/while循环。

十五:判断结构和关系运算符
    1、if/else只可以操作boolean表达式。
    2、siwth语句。每一个分支以break或goto结尾。

十六:值类型和引用类型
    1、值类型都分配在栈上,一离开定义的作用域,就会从内存删除。都继承自System.ValueTpe
    2、C#中,枚举和结构都是值类型。结构类型也是用new创建,但是是在栈上分配。也可以不用new,但是要对每一个字段赋值。
    3、结构的默认构造函数是保留的,不能重定义。结构不能被继承。
    4、包含引用类型的值类型。结构里面包含类时。赋值将会有两个独立的结构,但是每个里面都包含指向同一个对象的引用。这是“浅复制”。想实现“深复制”要实现ICloneable接口。
    5、按值传递引用类型。传递的复制的一份指向调用者对象的引用。因此可以改变对象的域数据,但是重新赋值对调用者不可见。
    6、按引用传递引用类型。完全是对同一个对象操作,可以重新赋值。

十七:装箱和拆箱
    值类型转换成引用类型是“装箱”反过程成为“拆箱”

十八:枚举。总是用带有前缀的方式来引用。

十九:Object类
1、包含一些实例级别和类级别的成员。某些实例级别的带有virtual关键字,可以被派生类重写。
2、实例级:Equals,GetHashCode,GetType,ToString,Finalize,MeberwiseClone
   类级:Equals,ReferenceEquals

二十:系统数值类型

二十一:String
    string是引用类型,但是相等行运算符比较的是对象的值而不是所引用的内存。注意“逐字字符串”的用法。
    C#的字符串是不可变的,因此引入StringBuilder类,文本密集的应用程序应使用StringBuilder。

二十二:数组类型
    是引用类型,继承自System.Array。如果声明时知道数组的值,可以在大括号中指定,同时new可以省略。系统会设定默认值。

    数组分为矩阵数组和交错数组。

    数组清空只是把值设定成默认值。

二十三:可空类型
    可供类型即是可以赋予null的类型。使用类似int? num=0;的方式,只能针对值类型。局部可空变量必须赋予一个初始值。使用??可以给一个获得的实际是null时给一个可空类型赋值。例如:int? myData=ds.GetNum()??100;

二十四:命名空间
原创粉丝点击