.net 4.0面向对象编程漫谈(基础篇) 读书笔记 一

第一章 面向对象编程基础(没啥有用东西)
 
vs2002 7.0
vs2003 7.1
vs2005 8.0
vs2008 9.0
vs2010 10.0
 
Any CPU x86 x64 Itanium
 
In-Process Side-by-Side Execution 在同一个进程内host多个不同版本的CLR,.net 4.0引入
 
.net framework SDK: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin
ildasm等许多工具都在这个目录下
v6.0A好像是针对framework 2.0的
 
REPL Read-Evaluate-Pring Loop
 
第二章 数据类型趣谈
 
.net 4.0中引入了一个BigInteger类型,可以表示任意大的整数;而之前最大是long (Int64)
 
线程堆栈与托管堆
 
private void DoSth()
{
    Object obj; //编译器会自动将这行代码删除。(光声明但不初始化且没被用到会被编译器删除,如果试图使用未初始化的字段,会压根编译不过去)
    Console.WriteLine("done!");
}
 
== 用于比较值类型时是比较内部实际的值,用于引用类型比较时,比较的是引用地址。而string类型重写了==运算符,所以看起来很像值类型。
不过我认为==比较的就是内部实际的值,对于值类型来说值就在那,而引用类型的值实际上是一个托管堆地址,string类型具有唯一性(两个一样的字符串在托管堆上是一个地址)
操作符重载: public static bool operator ==(string a, string b);
 
Struct类型的特殊之处:
1. 继承自ValueType
2. 不能被继承
3. 不能定义无参构造函数
4. 不能有initializer
5. 在构造函数中必须对所有字段进行赋值
6. 在使用前必须先赋值,例如Point p; Console.WriteLine(p.X);/*不能编译*/ p.X = 3; Console.WriteLine(p.X);/*ok, pass但此时不能访问Y,因为Y尚未被赋值*/
 
String的特殊之处
CLR中有一个表叫做驻留池(暂存池)Intern Pool
string s1 = "aaaa";
string s2 = "aaaa";
string s3 = new String('a', 4);
string s4 = string.Intern(s3); //string的静态方法,如果驻留池中存在直接返回引用地址
(object)s1 == (object)s2 //true
(object)s1 == (object)s3 //false
(object)s1 == (object)s4 //true
 
字符串类型可以和任意object相加,相当于string.Concat
 
Nullable<T>
int i = ni ?? 0;
有可空类型参与运算,结果也为可空类型,bool? 除外,有些特殊规则(& |),例如false & null 为false.......
 
dataObject.AnNullableInt = dr["IntColumn"] as int?; //dr为DataRow,可空值类型的用处之一
 
第三章 字段、方法与属性漫谈
 
Tuple元组 发音啊
可以用Tuple.Create静态方法和new Tuple<T1, T2>来创建Tuple对象
.net中定义了1~7个Tuple定义
Tuple<T1> Tuple<T1, T2>....Tuple<T1, T2..T7>, Tuple<T1,...T7, TRest>
最后这个TRest是另一个Tuple,可以签套。
Tuple < int ,  int > t =  new Tuple < int ,  int >( 8 ,  5 );
Console . WriteLine (t .Item1 );
Console . WriteLine (t .Item2 );
 
Tuple的一个作用是可以作为方法返回值,一次性返回多个结果。
 
partial方法 (分部方法)
0. partial方法不能有返回值
1. partial方法前不能加任何访问修饰符(也就是说私有),一个partial是定义,另一个是实现
2. partial方法只能在partial类中定义
3. 如果只有定义部分,没有实现部分,则编译器会将调用的代码删掉
4. 其作用是为提供了一个方法的“功能扩展点”,例如在Linq2Sql自动生成的实体类中就有广泛的应用(比如OnXxxChanging, OnXxxChanged)
 
泛型扩展方法
static class MyExts
{
    public static void Test<T>(this T obj) //泛型扩展方法可以为任何类型提供扩展
    {
        //..........
    }
}

你可能感兴趣的:(.net)