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

  • 相关阅读:
    jcmd的简单实用
    ConfigMap介绍
    Okhttp3基本使用
    Spring中的@Transactional(rollbackFor = Exception.class)属性详解
    正则表达式中/i,/g,/ig,/gi,/m的区别和含义
    事务日志已满,原因为“ACTIVE_TRANSACTION”
    Windows Server查看和记录远程登录信息的方法
    Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
    将float转换为数据类型numeric时出现算术溢出错误
    java对redis的基本操作
  • 原文地址:https://www.cnblogs.com/teamleader/p/1943195.html
Copyright © 2020-2023  润新知