C#学习笔记——(转帖)
时间:2011-03-21 来源:蓝鸿鹄
1、C#要求必须把常数设置成能够在编译阶段(语法分析)确定下来的值;
2、C语言不像C#那样有一个String 数据类型,C语言支持一种名为char的数据类型,C语言中的字符串其实都是一些字符数组。C#的字符串可以转换成一个字符数组,反之亦然,有自己的数据类型。
3、在绝大多数C语言版本里,Char的宽度都是8个bit且代表的是一个ASCII字符集里的字符。但在C#里,Char的宽度是16个字节且代表的是一个Unicode字符,C#中的Char变量绝不是数值。
4、C#的字符串的索引是只读的,一旦在程序里创建出一个字符串,就不能再改变它。字符串的修改,其实都是通过返回一个新的字符串的办法来做到这一点的。
字符数组的Length属性与字符串的Length属性不同,前者是字符的长度,后者是字符串的字符个数。
5、String类不支持无输入参数的构造器。
6、当Console.WriteLine 方法的第一个输入参数是一个格式字符串时,它将调用String.Format方法来完成输入字符串的构造工作:先由String.Format构造出一个将被输出的字符串再由Console.WriteLine方法把这个字符串送到控制台。
7、C语言不像C#一样有自己的Bool 数据类型但是同样有布尔表达式。
8、与使用“==”操作符去比较布尔量的做法相比,使用异或(XOR)操作符“^”将更稳妥。只要用“^”对“!=”的结果再进行一次逻辑非(NOT)处理就能得到与“==”操作符同样的效果。
9、如果某个变量只在某个语句中出现过,就应该把该变量声明在这个语句里。
10、C/C++都允许程序员在语句块中再次对变量声明,或者在语句外再次声明语句内的变量,但由此会产生的程序漏洞,而且漏洞很难查找。基于此,C#则不允许在嵌套着的语句块中再次对变量声明但是允许在“兄弟”语句块声明同名变量。
11、尽量减少编写重复代码的次数。
12、C#不允许在不是语句块的If 或else 部分对变量做出声明。
13、C#没有“else语句”之类的东西,C#中的If 语句由一个If 部分和一个可选的else部分构成。
14、While 循环体在大部分时间里都不会出问题,麻烦经常发生在While 循环刚刚开始和即将结束的边界上。
15、C#中的Continue 语句通常要用一条If 语句来触发,作用是使程序跳过循环体中的后续语句而直接进入下一个循环。
16、C#里,异常被标识为类,大多数的基本异常都是在System名空间里声明的。
17、最简单的try语句是这样的:以C#保留字“try”开头,后面跟着一对花括号,花括号里有可能抛出一个异常的一些语句;接下来是一个由保留字catch引导的语句块,负责对try语句块里的语句所抛出来的异常做具体的处理。
18、在对集合类型的处理方面,for语句和foreach语句代表了俩种截然不同的思路:for语句是依次读取数组的各个元素并且对其进行修改或重建;foreach则是先给数组(或者)其他集合类型拍一张“快照”,再一个个地对照片上的元素进行处理。
19、C#不允许程序员把浮点或decimal类型的变量或表达式用在保留字“Switch”后面的括号中。
20、对某二进制位进行测试:如果想知道某个整数的第n位是否处于置位状态,就用一个只有第n位被置位的值对这个整数进行按位与操作,结果等于测试值证明处于置位状态,否则为0。
21、二进制数左移n位相当于乘2的n次方。
22、带符号位整数的右移操作称为“算术移位操作”,其他移位操作称为“逻辑移位操作”
枚举类型能帮程序员把方法的输入参数限制在预先设定好的范围内;枚举类型从本质上讲都是整数,完全可以把枚举成员用作操作符的操作数,所以非常适用来编写哪些需要用到大量布尔信息的方法。
23、C#中,并非所有的类都能用来创建对象,比如抽象类。
24、C#中,只要在声明时没有明确指定,字段和方法就将缺省地成为实例。
25、C#不允许程序员在结构里声明一个无参数的构造器,目的是为了加快那些基于结构的数组的创建速度。
26、对于结构,不管你声明了多少个带参数构造器,C#都将为它提供一个无参数的Public的构造器。
27、C#允许程序员用“Static”保留字声明一个静态的无参数构造器。在执行某个类里的任何一个实例构造器之前和访问这个类里的任何一个静态成员之前,C#将先执行静态构造器对静态成员进行初始化。
28、C#中的结构数据类型没有实现“==”和“!=”操作符。
29、类是一种引用数据类型,不同于一般的值数据类型,它是一个指针,指向堆里某一块存储区域。
30、Base所代表的构造器调用也叫“预构造器”取自基类构造器,先执行预构造器再执行本身的构造器。
31、若不指定预构造器,C#将自动把base()作为预构造器。
32、当你的程序创建一个新对象时,System.Object类里的无参数构造器将最先被调用,然后才是Object各级后代里的一系列构造器,最后才是正被你用来创建新对象的那个类的构造器。
33、变量的实际类型要么是它本身的声明类型,要么是它本身的声明类型的后代。
34、C#不支持多方继承类,但是它允许继承类和多个接口。构造器是不会被继承的。
35、属性是对象的某种特征,方法是执行一个动作。如果某段代码需要一个参数才能读取一个值,或者需要一个额外的参数才能设置一个值,就应该把它声明为一个方法。
36只有方法和属性才能被声明为Virtual。
37、覆盖一个Virtual方法不允许改变访问限定符和返回类型。
38、C#允许把任何对象赋值给一个被声明为Object类型的变量,允许用一个Object类型的数组去保存任何对象,因为所有类都是派生自Object类的。
39、IS操作符有两个优点:1、如果对象是Null,它仅返回null而不是抛出一个异常。2、无论对象与派生自ExtDate类的哪一个类进行比较,都将返回True。