zoukankan      html  css  js  c++  java
  • .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) //泛型扩展方法可以为任何类型提供扩展
        {
            //..........
        }
    }

  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/teamleader/p/1943195.html
Copyright © 2011-2022 走看看