C#语法基础

  1. C#严格区分大小写
  2. 单行备注的方法为在备注信息前加入 // 符号
  3. 多行备注的方法为  /*多行备注信息*/
  4. 给函数增加备注的信息的方法
    ///<summary>
    ///函数注释 
    ///</summary>
  5. 分号作为语句的结束符
  6. {} 将多个语句括在一起作为一个语句组
  7. 变量的声明格式: 
    int i=0;
  8. 常量的声明格式:
    const string str="字符串";
  9. 常用数据类型:
    int  -2147583648~2147483647之间的整数
    byte  0~255之间的整数
    short  -32768~32767之间的整数
    long  -9.2e18~9.2e18之间的整数
    float  单精度浮点数
    double  双精度浮点数
    decimal  128位的固定小数点数值
    char  单个16比特位的Unicode编码字符
    string  可变长的Unicode编码字符串
    bool  布尔型
  10. 算数操作符包括:加(+),减(-),乘(*),除(/),取余(%)
  11. 逻辑运算符包括:与(&&),或(||),非(!)
  12. 关系运算符包括:大于(>),大于等于(>=),小于(<),小于等于(<=),不等于(!=),等于(==)
  13. int,long和decimal除0会报错,double和float除0.0的值是Infinity(无穷大),唯一例外是0.0/0/0的值似乎NaN,NaN和Infinity与其他值的计算结果都是自己,唯一,例外是Infinity*0的结果为0
  14. 递增和递减操作符为:a++,a--,++a,--a
  15. 以var关键字声明的变量称为隐式类型,在声明的同时必须初始化,根据初始值自动推断数据类型,不可再改变数据类型
  16. string类型的值转换为数值类型,通常使用"数据类型.Pares()"方法,其它类型转换为字符串类型则用"ToString()"方法
  17. 三目运算符使用方法:b=(a>0)?a:a++
  18. if语句
    if(a>0){}
    else if(a=0){}
    else {}
  19. Switch语句只能判断int或string类型的数据,case标签值只能是常量
    switch(str)
    {
      case "字符串1"
        str="a";
        break;
      case "字符串2"
        str="b";
        break;
      default:
        str="c";
        break;
    }
  20. for语句
    for(int i=0;i>5;i++){}
  21. foreach语句
    foreach(string str in arrayStr) {}
    foreach循环不可对数组或集合中的数据进行修改.
  22. while语句
    while(a>0) {}
  23. do while语句
    do
      a+=1;
    while(a<10);
  24. 函数和过程不执行return后的内容,定义方法:
    public int GetCount(int i)
    {
      return i+100;
    }
    public void Megbox(int i)
    {
      MessageBox.Show(i.ToString());
    }
  25. 错误处理
    try
    {}
    catch(Exception ex)
    {}
    finally
    {}
  26. 使用throw抛出异常
    throw new ArgumentOutOfRangeException("提示错误内容");
  27. 一个类被拆分到多个文件中时需在定义类时加入partial关键字
  28. 如果把一个方法或字段声明为static,则为静态方法或字段,可以使用类名来调用
  29. 静态类只能包含静态成员
  30. 匿名类格式如下:
    var TempObj=new {a="abc",b=123};
    匿名类只能包含public字段,字段必须初始化,不可是static字段,而且不能在其中指定任何方法.C#编译器根据字段的名称,类型,数量和顺序来判断匿名类的两个对象是否相同.
  31. 创建对象
    TempClass TempObj=null;
    TempObj=new TempClass();

    TempClass TempObj=new TempClass();
  32. const字段同时也是static字段
  33. 所有的基本数据类型统称为值类型,对象,数组和集合为引用类型.值类型存储在栈内,引用类型存储在堆内(引用本身还是在栈上).
  34. 可空的值类型
    int? i=null;
    可空值类型可以空值判断,如:if(i==null),可空类型为引用类型
  35. ref和out关键字
    加入ref关键字的参数修改的同时将同时应用于实参
    加入out关键字的参数修改的也同时将同时应用于实参,而且必须字函数内部赋值
  36. 可用System.Object创建变量,该变量能引用任何引用类型,System.Object可以简写为object
  37. 将一个数据从栈自动复制到堆的行为称为装箱,两个值的改变不会相互影响
  38. 将引用了装箱值的object引用强制转换成值类型称为拆箱,如:
    int i=(int)a;
  39. 枚举类型
    enum abc{a,b,c}
    abc eTemp=abc.c;
    枚举类型的变量只有赋值之后才能使用,枚举内部默认每个元素对应一个整数值,第一个元素默认为0,以后每个元素递增1,也可以改变元素对应的整数值,如:
    enum abc{a=1,b,c}
  40. 某些时候类中只包含极少数的数据,因此管理而造成的开销显得极不合算,在这种情况下,更好的做法是将类型定义成一个结构体,结构体是值类型,可以包含字段,方法,构造函数.不能为结构体声明默认构造函数,不能在声明一个实例字段的同时初始化,不能继承.
  41. 数组的使用方法:
    int[] p=new int[5]; 或
    int[] p=new int[3]{1,2,3}; 或
    int[] p={1,2,3};
    数组创建的同时初始化可省略new关键字和数组大小.

    数组的大小可以不是常量,如: int i=3+1; int[] p=new int[i];
    复制数组的方法:
    int[] p={1,2,3}; int[] p2=new int[p.Length]; p.CopyTo(p2,0);  或:
    int[] p={1,2,3}; int[] p2=(int[])p.Clone();
    这些复制数组的方法为浅拷贝,只是复制引用,不会复制被引用的对象,如果想复制引用的对象就必须在for循环中编写.
  42. 集合的元素类型是object,比数组更容易解决元素的插入和移除.
    Arraylist集合类的使用方法:
    using System.Collections;
    Arraylist al=new Arraylist();
    al.Add(123);  //增加一个元素
    al.Insert(al.Count-1,234);  //在al的倒数第二个位置插入一个元素,参数1是位置,参数二是元素值
    al.Remove(123);  //移除值为123的元素
    al.RemoveAt(0);  //移除索引为0的元素
    Queue集合类用于先入先出的队列,例:
    q.Enqueue(123);  //增加一个元素
    q.Dequeue();  //移除元素,返回值为移除的元素值
    Stack集合类用于后入先出的队列,例:
    s.Push(123);  //增加一个元素
    s.Pop();  //移除元素,返回值为移除的元素值
    Hashtable结合用于带键值的队列,没一个元素都b包含一个key对象和一个value对象,不可有重复的key值,例:
    Hashtable ht=new Hashtable();
    ht["a"]=1;
    ht["b"]=2;
    foreach(DictionaryEntry de in ht)
    {
      string name=(string)de.key;
      int i=(int)de.Value;
      Console.WriteLine("name:{0},i:{1}",name,i);
    }
    SortedList集合类用于总是排序的带键值队列,key不可重复,总是根据key来排序,使用方法同Hashtable;
    创建集合的同时可以初始化,例:
    Arraylist al=new Arraylist(){1,2,3};
    Hashtable ht=new Hashtable(){{"a",1},{"b",2}};
    集合与数组的差异有:
    1,数组要声明它所容纳的元素的类型,集合不需要,因为集合以object形式存储元素.
    2,数组是固定大小,集合更具需要动态改变大小.
  43. 声明一个object类的派生类:
    class NewObject:object {}
  44. 在派生类中方法前加override关键字让它重写基类中加virtual的虚方法
  45. 扩展方法是在不生成新的继承子类的情况下增加一个类型的方法,比如适用于结构体的扩展,例:
    static class TempClass
    {
      public static int NewM(this int i)
      {
        return -1;
      }
    }
    使用时只要引用类所在的命名控件,该类型的元素就可以使用该方法,如:
    int x;  Console.WriteLine("x.NewM{0}",x.NewM());
    注:方法的第一个参数必须是要扩展的类型,必须在参数前面增加this前缀.
  46. 接口用来定义一种程序的协定,实现接口的类或者结构需要与接口的定义严格一致,接口好比一种模版,它定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用.
    接口不能被实例化,类可以实现多个接口并且通过这些实现的接口被索引,接口的变量只能索引实现该接口的类的实例.
    声明接口使用interface关键字,接口中的方法不能指定修饰符.
    接口不允许包含属性,构造函数,析构函数.不可从类中继承一个接口,虽然一个接口能从另一个接口继承.
    为了实现一个接口需要声明一个类或者结构,让它们从接口继承,并实现接口指定的全部方法,方法名,参数和返回类型要完全匹配.
  47. 在类的声明时加入abstract关键字,则该类为抽象类,该类不能被实例化.
    如果在抽象类的方法加入abstract关键字则方法为抽象方法,方法只能在子类中实现.
  48. 在类的声明时加入sealed关键字则该类为密封类,密封类不可被继承.
    如果在密封类的方法加入sealed则方法为密封方法,该方法在派生类不可被覆盖.
  49. 构造函数名与类名相同,析构函数名为在类名前加入 ~ 符号
  50. 在对象声明时加入using关键字可控制对象的生存周期,如:
    using (TempClass TempObj=new TempClass())
    {
      TempObj.a=1;
    }
  51. 声明一个可读写的属性
    class TempClass
    {
      public int x
      {
        get
        {
          //读操作
        }
        set
        {
          //写操作
        }
      }
    }
posted @ 2011-09-19 15:54  小天1981  阅读(243)  评论(0编辑  收藏  举报