zoukankan      html  css  js  c++  java
  • C#2.0经典读书笔记 (转)


    第一部分:C#入门

    1,可以为类或者命名空间指定别名
    例如(命名空间别名):using myAlias = myNameSpace1.myNameSpace2.Space3

    2, C#的另外几种开发工具:SharpDevelop / Snippet Compiler
         C#返编译软件:.NET Reflector
         C#单元测试工具:NUnit
         C#代码生成工具:CodeSmith
         C#代码标准检测工具:FxCop

    3, 编程风格建议
         A,代码块之间空一行
         B,左大括号占一行
         C,括号的嵌套层次要缩进(4个空格)
         D,变量命名规则(就是名首字母小字,后面出现单词的首字母大写,如myData)

    4, C#的四种数值类型不被.net平台上其他语言支持,这四种数值类型是(Sbyte,ushort,uint,ulong)

    5, 数据类型显式转换的两种方式:
         A,System.Convert 类提供多种类型的数据相互转换
         B,括号形式,如(int)

    6,C#中全局变量的解决方法
         用静态类和静态变量来实现,如:private static string name = "wang";

    7, a++ 和 ++a的区别
         a++ 先参与运算再自加 ++a 先自加再参与运算

    8,^运算符号
         用在两个bool型运算中表示异或(只有一个操作数为 true 时,其结果才为 true)
         用在两个int型运算中表示二进制按位异或(5^6 = 101^110=011(3))

    9, C#语言中数据类型检测
         检测数据类型:int a=5; a is int    返回true
         检测类型的容量:sizeof(int);

    10,C#中逻辑运算符
         “&”表示“与”,两者都为真结果才为真
         “&&”表示“与”,与&不同的是它仅在必要时才计算第二个操作数
         “|”表示“或”,两者中有一方为真结果就为真
         “||”表示“或”,与|不同的是它仅在必要时才计算第二个操作数
         “^”表示“异或”,两者中只有一方为真结果才为真
         “!”表示“非”,参与变量取反

    11,switch语句中的Case部分的内容为空时,直接执行Case的下一个Case中的内容

    12,switch语句支持对枚举型的分支处理

    13,三元运算符代替简单的if else 语句 
          例如:
          if (a>b)
          {c=a-b }
          else {c=a+b} 写为 c = a>b?a-b:a+b

    14,四种循环语句
         A:for(){} 执行次数已知,可正向步进,逆向步进,步长不一定为1
         B:foreach(){} 对集合实体进行遍历操作
         C: while(){};执行0次或0次以上,在循环体中改变循环判断条件
         D: do{} while(); 至少执行一次,在循环体中改变循环判断条件

    15,改变循环体执行的4种关键字:
         A:goto 从循环体中跳到标签位置,不建议从循环体外跳向循环体内
         B: return 跳出当前过程,而不是循环体
         C:break 跳出当前循环体(跳到当前循环体外闻)
         D:continue 跳过当前循环体中的当次循环,进入下一次循环

    16,关于冒泡排序算法的一个经典例子

    static void Main(string[] args)
              {

                  int[] myArray = new int[5] { 12,9,35,68,51};
                  int a = 0;

                  for (int i = 0; i < myArray.Length; i++)
                  {
                      Console.WriteLine(myArray[i]);
                  }
                  Console.ReadLine();

        //外层循环用来控制内层循环终值,因为每运行一次数组中的最大数会推动到数组最后
                  for (int i = myArray.Length - 1; i >= 0; i--)
                  {
                      for (int j = 0; j < i; j++) //内层循环用来比较相临两数,把大数向后推动
                      {
                          if (myArray[j] > myArray[j + 1])
                          {
                              a = myArray[j];
                              myArray[j] = myArray[j + 1];
                                myArray[j + 1] = a;
                          }
                      }
                  }

                  for (int i = 0; i < myArray.Length; i++)
                  {
                      Console.WriteLine(myArray[i]);
                  }
                  Console.ReadLine();

    }

    17,方法中的return意思是把控制权交给方法调用者,在方法上面一行使用///注释可以自动生成关于方法的说明
    ,调用者使用此方法时,VS2005会显示出这些注释(智能提示功能)。

    18,方法中传入参数中ref的用法(使参数按引用传递,ref参数必须初始化)

    19,方法中传入参数中out的用法同ref,不同之处是out的传入参数不用初始化

    20,方法重载的三种形式
         A:参数个数不同
         B:参数类型不同 
         C:参数类型相同,但参数引用和非引用 也是重载(比如:static int add(ref int a,ref int b) 
    和 static int add(int a, int b))

    21,System.Environment 此类获取当前运行环境下的很多信息.

    ------------------------------------------------------------------------------------
    第二部分 C#提高

    1,VS2005中类设计图的使用(ClassDiagram)用图形界面设计类,能自动生成类代码

    2,类的构成(类的成员): 
         A:构造函数(可重载)
         B:析构函数(一个类只能有一个析构函数,并且不能被调用),当程度封闭窗口,文件,网络连接这类非托管
    资源

    的时候,应当使用析构函数来释放这些资源。
         C:字段(在类内部使用)
         D:属性,(用来获取,修改类中字段的值,用get set实现,get set)
         E:方法。

    3,类成员的访问控制修饰符(private(默认) public protected internal)
         其中,protected 只能在类内部访问和被它的派生类中访问,介于private 和 public 之间
         internal是类型和类型成员的访问修饰符,用来限制类成员,以便只有在当前命名空间或程度集中的类可以访问它

    4,枚举类型是轻量级的值类型,用enum来声明,枚举用来表达一组特定值的集合行为,如windows窗体的可选状态等

    5, 结构用struct来声明,结构与类的区别:
         A:结构是值类型,在堆栈上分配地址。缺点是资源有限,不适合处理大的逻辑复杂对象,结构不支持继承,但可

    以实现接口。
         B:类是引用类型,在堆上分配地址。
         C:结构执行效率要比类高,但只适合小对象
       
    6,注意多维数组和交错数组(数组的数组/锯齿数组)的区别。
        多维数组:int[,] intArray = new int[2,2]{{10,11},{12,13}}
        交错数组(元素为数组的数组,维度和大小可以不同):写法如下
        int[][] intArray = new int[3]
        int[0] = new int[]{10,20};
        int[1] = new int[]{15,30,33};
        int[2] = new int[]{15,22,25,29,65};
        或者:
        int[][] intArray = new int[][] 
        {
          new int[] {10,20},
          new int[] {15,30,33},
          new int[] {15,22,25,29,65}
        }

    7, A:数组的遍历foreach,
         B:数组的清除System.Array(myArray,index,length),
         C:数组的查找Array.IndexOf(myArray, Object) 和4个参数的高级查找缩小查找范围
         D:数组的排序Array.Sort(myArray) 顺序排序 / Array.Reverse(myArray) 注意此为反转数组并不是倒

    8, ArrayList ,同数组最大的区别是arrayList的容量是自动扩充的,
         注意arraylist.capacity 显示容量,arraylist.count显示元素个数。
         两种增加元素的方式ADD,insert
         三种删除元素的方式clear,Remove,RemoveAt
         ArrayList向Array的转换
         myArrayList.TrimToSize(),缩小capacity到当前实际容量,减少内存浪费.
       
    9, HashTable 键值对集合的字典,不能通过其index来访问,只能通过key来访问表中值,也就是hashTable[key]
     
     
     
     作者: 58.33.87.*  2007-5-18 13:53   回复此发言   
     
    --------------------------------------------------------------------------------
     
    3 C#2.0经典读书笔记(第一二部分:C#入门和提高) 
          增加元素方式:add(key,value)
         删除元素方式: clear() / remove(key)
         遍历:foreach (DictionaryEntry d in h1)
         查找: HashTable.Contains / HashTable.ContainsKey 是否包含指定key的项
               HashTable.ContainsValue 是否包含指定value的项

    10,Queue 队列类是先进先出集合
         Queue的三个主要操作
         Enqueue 将一个元素增加到Queue的尾部
         Dequeue 从Queue的开始处取出最旧元素并移除此元素
         Peek 从Queue处返回最旧元素但不删除

    11,Stock 堆栈类是后进先出集合
         Stock的三个主要操作
         Push 在Stock的顶部加入元素
         Pop 从Stock顶部取出最新元素并移除此元素
         Peek 从Stock顶部返回最新元素但不删除

    12,SortedList 是ArrayList 和 HashTable的结合体 ,当同时需要键值对和顺序索引时,使用SortedList


    13,Dictionary字典类(泛型类)


    14,Interface 接口(接口只定义有哪些功能,但不实现功能)
         实现接口的成员不允许是静态的,非公共的
         C#不允许类的多重继承,允许一个类同时继承类和接口
         接口可以做为参数传递到方法中。接口可以做为返回值
         接口的实现分一般实现和显式实现。显式实现是为了解决如下问题:如果一个类继承了两个接口。两个接口有一个相
    同名称的方法名,那么出现名称冲突,使用显式接口可以解决这一问题.

    15,abstract 抽象类 (抽象类类似接口,但允许方法的具体实现,是接口和普通类的结合体)
         抽象类中可以定义抽象方法,但抽象(属性)不能具体实现,
         抽象类的派生类必须实现所有抽象成员。(用override来实现抽象成员)

    16,sealed 密封类 
         密封类用来限制别的类从它继承,不建议使用,除不能继承外同普通类使用方法相同,用于:在类中包含有敏
    感性信息时可以考虑使用密封类.

    17,高级转换
         A: is 用来检查对象是否与指定类型兼容
         B:() 用来强制进行类型转换
         C:as用于在兼容类型间转换(与强制转换相比,它在转换失败时不会引发异常)

    18,virtual 和 override 
         Virtual用于修饰方法,属性,索引器,事件声明。要扩展或修改继承的方法,属性,索引器,事件声
    明的抽象实现或虚实现,必须使用override修饰符

    19,类成员中的属性和字段:
          属性是对外部的,定义为public protected ,字段是类内部的,只能private,体现类的封装性

    20,迭代器(.net2.0新知识)通过迭代器可以实现对类中数据结构的遍历,定义方法如下
         public System.Collections.IEnumerator GetEnumerator(){}

    21,分部类(.net2.0新知识)可以将类,结构,接口的定义分拆到多个源文件中,每个源文件包含类的一部分,分
    部类用partial定义.如windows窗体应用程序中form1.cs 和 form1.designer.cs 就是两个文件中使用了分部
    类.
         使用分部类的注意事项:
         A:单一类不要使用分部类定义关键字:partial, .net会去寻找另外一部分,增加系统负担
         B: 各分部类的可访问性应一致
         C:各分部类应都使用partial关键字来定义
         D: 各分部类继承了不同的类和接口时,.net 会很好的将其结合起来
         E: partial关键字应出现在class,interface,struct 之前一位置。

    22,索引器 :为类提供与数组相似的方式进行索引,跟属性相似。索引器也可以用在结构和接口中,如果在接口
    中定义了空索引器,实现该接口的类必须实现它的接口的索引器.

    23, 泛型(.net2.0新知识)

  • 相关阅读:
    补点基础:Javascript中的类和闭包
    Extjs学习笔记之五——一个小细节renderTo和applyTo的区别
    Extjs学习笔记之八——继承和事件基础
    总结一篇
    再补点基础:Javascript的构造函数和constructor属性
    Extjs学习笔记之六——面版
    Extjs学习笔记之七——布局
    Extjs学习笔记之九——数据模型(上)
    引擎功率与扭矩哪个比较重要
    毕业三年,同学基本都辞职了,大部分人看完很有同感~
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/980239.html
Copyright © 2011-2022 走看看