c#学习之一

 1. verbatim string  逐字字符串

   string  filename =  @"c:\\mytxt.txt"; 中@后的则是一个逐字字符串,其中的“\”直接可以释义不作为反义字符的标识。而且可以跨行,换行字符或者制表字符都能够保留。

   string  filename = "c:\\mytxt.txt"; 中的字符串是一个一般字符串, 其中的“\”被释义为特殊的字符串。

 

2.格式化输出:
  Console.WriteLine("{0} : {0:c2} :{0:f4} : {0:E2} : {0:G}", d);
  显示结果为: 10805.795 :$10850.7950 :10850.7950 : 1.09E+004 : 10850.795

  Console.WriteLine("{0} ({2}) : {1}", Line_cnt++, text_line,text_line.Length );
  
  例子中的{}内的参数代表参数的后面参数的位置,0就是第一个参数,1就是第二个参数; C代表当

地货币,代表定点格式,E代表指数形式 ,G 则为最进凑的输出形式

 

3. String 类型:

    string 类型 的对象具有不可变性,所以我们不可以对字符串常量力的个别字符进行涂写动作, 例如 text_Line[0] = "sss";这样写是错误的。我们平时看到string被修改的情况其实实际是重新创建了一个新的strign 对象。

    例如 text_line.ToLower() ;是将text_line 变成小写,但是实际上并没有改变text_line中的内容,如果进行赋值 newtext_line = text_line.ToLower();这样

 newtext_line 就是存储着text_line的小写信息。

 

4. StreamReader  freader = File.OPen(filename); 打开一个文件读取其内容    freader,ReadLine() 读取一行  peak() 读取下一个字符但不取出

    StreamWriter  fwriter=  File.CreatText( dir) ; 写入一个文件。   fwriter : WriteLine()  Write()

 

5.局部变量:

   编译器访问 局部变量之前都会检查它是否已经被明确赋值, 但是编译器以来月 静态流程分析 ,仅能够完全评估 “常量表达式”或是const  修饰的变量,对于 non-const 对象编译器认为它可以是任意值。 所以为了确保使用局部变量时候已经赋值,定义时候最好一并将之初始化。 例如 string str = null;    例如 下面例子:

   string username;
            const int i = 0;
            const int j = 1;
            if (i < j)
            {
                username = "Frank";

            }
            Console.Write("HELLO "+ username);  

  去掉 const 的修饰,则会显示 错误 1 使用了未赋值的局部变量“username” C:\Documents and Settings\lijj\My Documents\Visual Studio 2005\Projects\Study\Study\Class1.cs 24 37 Study

 

 出于"先声明后使用"的原因,对于局部变量的命名也要尽量避免重复,同一个局部范围内不能使用相同的命名, 而且不能覆盖上一层次的同名变量。例如下面的例子:

 public class EntryPoint()
    {
       private string  str = "ss";
        public void local()
        {
            str = "not ss";

            string  str = "still ss";
        }

        private string  str = "ss";

    }

不论  private string  str = "ss"; 放在函数 local() 的前后,都会报错 在local()中str被重复定义是错误的。 这是因为按照该编译器的工作方式 ,对于class的定义是在 每一个函数体被编译之前已经完成的, 另外每一个 局部的板块都维护一个自己的生命空间 ,区块内的声明的名称在外面是不可见的, 但对于嵌套它的上一级区块是可见的。

 

 

 

6. C#的类型 type 有两种: value类型 和reference

     c#中重要的预定义值类型有:简单类型和枚举类型,它们都是sturct 结构类型。
     c#中的重要引用类型有:字符串、数组、接口、代表(delegate),它们都是类。

    value 指的是本身存储其相关数据,例如我们常用的int等类型都是 value类型 , 其数据直接放在他的对象中并可以直接通过对象的名字进行访问,拷贝也属于 深拷贝 ;

     int i = 5;

     int j = i ;   则 i、j都是5,都代表真实的信息,并且

   Reference 指的是本身并不直接存储相关数据,而只是存储这数据所在的地址,也就是说 实际上 reference 类型的对象是分为两部分,一部分handle 即看到的对象的名称,实际上存储着数据所在的地址,另一部分是 manage heap 处,需要使用new 进行创建。特殊的是string 类型可以直接赋值,类似于value类型使用。对于 new 分配而来的 object 由运行环境自行进行垃圾回收。

   例如: Class Point {   ...      .... }

             Point  orgin = new Point(); 

             Point orgin2 = orgin;  

             Point orgin3 = orgin.CopyTo( orgin ,0);

                 其中origin 是这一对象的名词,也就是存储了该对象的 地址, 而需要使用 new 创建真正的对象。 Reference类型的拷贝属于浅拷贝,也就是 赋值给另一个变量后,orgin 和 orgin2指向同一个对象数据。 要进行深拷贝需要使用CopyTo方法,例如例子中的 orgin3就是指向另外一个对象,只不过是数据相同而已。

    7. 数组创建方式 Array

     (1) int[]  intArray = new int[5]  {1,z2,3,4,5};

     (2) int[]  intArray  = { 1,2,3,4,5} ;

     (3) int[]  intArray = new int[5] ; intArray[0]=1 ; ...   ...  intArray[4]=5;

   8. 数组列表ArrayList:

       提供了一种动态增减元素的数据结构, add() 想列表末尾添加一个新元素,count属性代表实际际存储的元素数目, capacity 代表数组列表的容量,可以显式的指定容量的大小,TimToSize()方法使得capacity 与countw吻合。  ArrayList的内容放在一块连续的内存中,当超过其容量是会分配一块二倍的内存用于存储,并将原来的数据也拷贝过来。

     ArrayList 中的元素对象是object 类型,Object类型使得不管任何类型的对象,自定义的或是系统的,reference 或是 value 的类型都可以作为 object 处理。

    9. object 类型   的装箱操作:

        Object 是Reference类型,reference是一个 handle/object对, 但是可以通过 boxing 即装箱操作将 value 类型的值 转变为 Object , 其过程为:

       (1)在manged heap 内分配一个 object box 也就是分配一块空间,用来存放 value的值。

       (2)将 value的值 复制到object box 空间内。

       (3)将此object box 空间的 地址赋予给 object 对象的Hadle,也就是对象名称。

       相应的反向操作时候,也就是拆箱操作,先将箱内的数据复制回 value 对象内,然后managed heap 上的box 引用计数器减一。

       将object 向下转型的时候有两个可用的操作符, is 判断 object 值得类型是否符合你的判断 ,as  相当于是做强制性转换。

    10.HashTable : 存储一个key/value对,都是object类型,key用于查询,value是存储的值。

    添加方式: HashTable["key"]=value ;  或者 HashTable.Add(key , value)

    每个key/value对都是一个 DictionaryEntry ,可以使用foreach 循环遍历hashtable 中的值,例如 foreach (DictionaryEnty  in Hashtable)

    11. C# 与 .Net  FrameWork 类型对照:

      C#                      System                                            

   sbyte                  System.SByte

   short                  Systrm.Int16

    int                     System .Int32

    long                   System.Int64

    float                   System.Single

    char                   System.Char

    decimal               System.Decimal

   object                 System.Object

 

   byte                    System.Byte

   ushort                  Systrm.UInt16

    uint                     System .UInt32

    ulong                   System.UInt64

   double                 System.Double

    bool                    System.Boolean

   string                   System.String

posted @ 2009-07-02 14:50  frankself008  阅读(328)  评论(0编辑  收藏  举报