C#本质
2012-07-05 14:40:07| 分类: 读书札记 | 标签:c# |字号 订阅
1:在string 的值之前加上一个@符号,那么值中的所有字符将保持原样包括转义字符。
2:string.format(),并不会输出值、仅仅是返回该值.
3:string 为不可变的。将string复制为""和null是两个不同概念
4:可空修饰符可以让null复制给只类型,int ? a=null
5:隐士转换不需要转换符,而显示转换则需要。
6:在数组中,出交叉数组外,其余数组的唯数的值必须相同。交叉数组则不需要。但是每一个新唯必须实例化。
7:数组的clear方法并不会改变数组的长度也不会删除数组中的元素、仅仅是将它们重置为默认值(0,false,null)。默认情况下, 数组变量被赋值给另外一个数组时,其实质是将该诉诸的引用复制过去。
8:关系运算符和相等运算符,返回的只会是一个Boll值。
9:值类型作为参数传递时,传递的是一个值的副本,而引用类型则传递的引用。所有,前者在传递过程中被改变了,但是原来的值不会变。而后者无论在什么地方被改变了,则该引用就发生了改变.
10:静态构造器中赋值的优先级是大雨字段声明赋值的。
11:readonly的值其实是可以在构造器中改变的。
12:使用const是因为,代码在编译的时候不会更改,它本身为静态字段。
13:关于分布类和内部类,前者允许一个类的内容可以存在于不同的.cs代码文件中,方便团队协作开发,使用关键字partial声明。
而内部类,则是增加了封装程度。设为私有是,包含类将不能访问内部类的私有成员,但是内部类却能完全访问包含类的成员。
14:派生类:所有的派生类都可以访问起基类的所有成员。也可以重写在基类中允许被重写的方法和属性。
15:protected修饰符,只允许其派生类访和自身访问该类,增加了封装程度。
16:C#是一个单继承的编程语言,所有当遇到多重继承的时候就需要考虑使用多态来解决多继承的问题。
17:使用sealed关键字来声明密封类。提高封装程度,密封类是禁止被派生的。
18:补充第十四点,当派生类需要重写父类的属性回事方法是,需要在父类的属性或是方法声明中加上virtual修饰符,将方法声明为虚方法。在被重写后,当实例是谁,则调用谁的方法、并不是被重新后每次都一定调用被重写后的方法、因为重写方法是为了解决父类方法的Bug和设计缺陷。重写不应该改变被重写方法的访问级别。
19:AS和is运算符的区别在于,AS除了比较之外还会向目标对象进行转换,如果转换失败则会将NULL赋给目标值,但是is却只会比较。
20:接口:
接口定义了一组规范。这个规范应该有一个完成效果,定义的规范则是为了继承对象实现该接口接能完成定义好的规范,实现该规范的效果。接口的出现是为了提高代码的复用,减少相同功能的代码编写。实现接口有两种方式,一种是显示实现,显示实现将只允许从接口调用方法,而一般实现则可以通过类和接口调用。接口也是可派生的。接口本身无法被实例,只有同过类来实现,接口也可以派生接口。显示继承隐藏了代码的实现提高了封装性和代码安全性。
21:值类型储存在栈中,因此,值类型被赋值是是传递的一个副本,而引用类型储存在堆中,传递时只会传递一个指向value的地址引用。所有,前者在赋值过程中被改变后,起本身值不会发生变化,而引用类型则相反。
22:在编码过程中,应该尽量减少装箱和拆箱。值类型想其它类型的转换时发生装箱,装箱是隐士的,频繁的装箱拆箱,系统性能将受到很大影响。齐表现为内存占用增高。
23:重载,是一个方法的多种形态,根据签名的不同实现不同的功能。
24:在泛型的使用的过程中,如果不确定参数类型那么可以使用default(T)来设置一个默认类型。
25:add运算符,一假则假,or运算符、一真则真。
26:委托,需要用delegete关键字声明,几本操作于类相同,但是类实例之后叫对象,而委托实例之后仍然是委托。委托只是一个方法指针。相当于一个中间托管库。可以 使用+=和-+创建委托链,实现多个方法的调用。(调用顺序一般是正序)
27:关键字查询,from,select, where group by linq查询方式编译器会自动判断数据源的类型,所有查询均为强类型。
28:事件。event的出现解决了委托封装不彻底,实际有了事件封装也不是很彻底,只是较委托来说,提高了封装程度罢了。