C#严格区分大小写
单行备注的方法为在备注信息前加入 // 符号
多行备注的方法为 /*多行备注信息*/
给函数增加备注的信息的方法 ///<summary> ///函数注释 ///</summary>
分号作为语句的结束符
{} 将多个语句括在一起作为一个语句组
变量的声明格式: int i=0;
常量的声明格式: const string str="字符串";
常用数据类型: int -2147583648~2147483647之间的整数 byte 0~255之间的整数 short -32768~32767之间的整数 long -9.2e18~9.2e18之间的整数 float 单精度浮点数 double 双精度浮点数 decimal 128位的固定小数点数值 char 单个16比特位的Unicode编码字符 string 可变长的Unicode编码字符串 bool 布尔型
算数操作符包括:加(+),减(-),乘(*),除(/),取余(%)
逻辑运算符包括:与(&&),或(||),非(!)
关系运算符包括:大于(>),大于等于(>=),小于(<),小于等于(<=),不等于(!=),等于(==)
int,long和decimal除0会报错,double和float除0.0的值是Infinity(无穷大),唯一例外是0.0/0/0的值似乎NaN,NaN和Infinity与其他值的计算结果都是自己,唯一,例外是Infinity*0的结果为0
递增和递减操作符为:a++,a--,++a,--a
以var关键字声明的变量称为隐式类型,在声明的同时必须初始化,根据初始值自动推断数据类型,不可再改变数据类型
string类型的值转换为数值类型,通常使用"数据类型.Pares()"方法,其它类型转换为字符串类型则用"ToString()"方法
三目运算符使用方法:b=(a>0)?a:a++
if语句 if(a>0){} else if(a=0){} else {}
Switch语句只能判断int或string类型的数据,case标签值只能是常量 switch(str) { case "字符串1" str="a"; break; case "字符串2" str="b"; break; default: str="c"; break; }
for语句 for(int i=0;i>5;i++){}
foreach语句 foreach(string str in arrayStr) {} foreach循环不可对数组或集合中的数据进行修改.
while语句 while(a>0) {}
do while语句 do a+=1; while(a<10);
函数和过程不执行return后的内容,定义方法: public int GetCount(int i) { return i+100; } public void Megbox(int i) { MessageBox.Show(i.ToString()); }
错误处理 try {} catch(Exception ex) {} finally {}
使用throw抛出异常 throw new ArgumentOutOfRangeException("提示错误内容");
一个类被拆分到多个文件中时需在定义类时加入partial关键字
如果把一个方法或字段声明为static,则为静态方法或字段,可以使用类名来调用
静态类只能包含静态成员
匿名类格式如下: var TempObj=new {a="abc",b=123}; 匿名类只能包含public字段,字段必须初始化,不可是static字段,而且不能在其中指定任何方法.C#编译器根据字段的名称,类型,数量和顺序来判断匿名类的两个对象是否相同.
创建对象 TempClass TempObj=null; TempObj=new TempClass(); 或 TempClass TempObj=new TempClass();
const字段同时也是static字段
所有的基本数据类型统称为值类型,对象,数组和集合为引用类型.值类型存储在栈内,引用类型存储在堆内(引用本身还是在栈上).
可空的值类型 int? i=null; 可空值类型可以空值判断,如:if(i==null),可空类型为引用类型
ref和out关键字 加入ref关键字的参数修改的同时将同时应用于实参 加入out关键字的参数修改的也同时将同时应用于实参,而且必须字函数内部赋值
可用System.Object创建变量,该变量能引用任何引用类型,System.Object可以简写为object
将一个数据从栈自动复制到堆的行为称为装箱,两个值的改变不会相互影响
将引用了装箱值的object引用强制转换成值类型称为拆箱,如: int i=(int)a;
枚举类型 enum abc{a,b,c} abc eTemp=abc.c; 枚举类型的变量只有赋值之后才能使用,枚举内部默认每个元素对应一个整数值,第一个元素默认为0,以后每个元素递增1,也可以改变元素对应的整数值,如: enum abc{a=1,b,c}
某些时候类中只包含极少数的数据,因此管理而造成的开销显得极不合算,在这种情况下,更好的做法是将类型定义成一个结构体,结构体是值类型,可以包含字段,方法,构造函数.不能为结构体声明默认构造函数,不能在声明一个实例字段的同时初始化,不能继承.
数组的使用方法: 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循环中编写.
集合的元素类型是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,数组是固定大小,集合更具需要动态改变大小.
声明一个object类的派生类: class NewObject:object {}
在派生类中方法前加override关键字让它重写基类中加virtual的虚方法
扩展方法是在不生成新的继承子类的情况下增加一个类型的方法,比如适用于结构体的扩展,例: static class TempClass { public static int NewM(this int i) { return -1; } } 使用时只要引用类所在的命名控件,该类型的元素就可以使用该方法,如: int x; Console.WriteLine("x.NewM{0}",x.NewM()); 注:方法的第一个参数必须是要扩展的类型,必须在参数前面增加this前缀.
接口用来定义一种程序的协定,实现接口的类或者结构需要与接口的定义严格一致,接口好比一种模版,它定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用. 接口不能被实例化,类可以实现多个接口并且通过这些实现的接口被索引,接口的变量只能索引实现该接口的类的实例. 声明接口使用interface关键字,接口中的方法不能指定修饰符. 接口不允许包含属性,构造函数,析构函数.不可从类中继承一个接口,虽然一个接口能从另一个接口继承. 为了实现一个接口需要声明一个类或者结构,让它们从接口继承,并实现接口指定的全部方法,方法名,参数和返回类型要完全匹配.
在类的声明时加入abstract关键字,则该类为抽象类,该类不能被实例化. 如果在抽象类的方法加入abstract关键字则方法为抽象方法,方法只能在子类中实现.
在类的声明时加入sealed关键字则该类为密封类,密封类不可被继承. 如果在密封类的方法加入sealed则方法为密封方法,该方法在派生类不可被覆盖.
构造函数名与类名相同,析构函数名为在类名前加入 ~ 符号
在对象声明时加入using关键字可控制对象的生存周期,如: using (TempClass TempObj=new TempClass()) { TempObj.a=1; }
声明一个可读写的属性 class TempClass { public int x { get { //读操作 } set { //写操作 } } }
posted @
2011-09-19 15:54
小天1981
阅读(
243 )
评论()
编辑
收藏
举报