1.类型转换[隐式转换]---------string 可看做是值类型
Float y = 3.5;
不会被编译,因为类似3.5这样带有小数部分的数字常量会被c#认为是double值
需要如下声明:
Float y = (float)3.5;
Float y = 3.5F;
2.Do...while的用法
do处理语句; while(bool表达式)
至少执行一次do语句;先执行Do语句,再判断bool值,为true返回do语句开始,否则,返回do语句结束点
3.跳转语句
类型 | 适用于 | 用法 |
Break | 只能用于switch、while、do、for | 退出其本身所在的处理语句,只能退出直接包含它的语句,不能退出包含它的多个嵌套语句 |
Continue | 只能用于while、do、for | 忽略循环语句块内位于它后面的代码,从而直接开始新的循环。只能使直接包含它的语句开始新的循环,而不能作用于包含它的多个嵌套语句 |
Return | 控制返回到使用return语句的函数成员的调用者。 | |
Goto | 将执行转到使用标签标记的处理语句。标签包括:switch语句内的case标签和default标签,以及常用标记语句内声明的标签。它不但能作用于定义它的语句块内部,而且能作用于该语句块外部,但不能将执行转到高语句所包含的嵌套语句块的内部 |
4.默认访问修饰符
项 | 访问修饰符 | 默认访问修饰符 |
类内成员 | private、protected、public、internal、protected internal | private |
非嵌套类 | Public、internal、partial【分部类】 | internal |
嵌套类(内部类) | private、protected、public、internal、protected internal、partial | private |
命名空间【命名空间的声明不能包含修饰符】 | - | Public |
接口中的方法 | - | Public |
5.Main函数,程序的入口。
参数为String[]类型,Main的参数即为命令行执行.exe时的参数,参数之间用空格分隔。
6.数组的高级应用
属性 | 获取方式 | 用法 |
上限 | arr.GetLowerBound(0) arr.GetLowerBound(1) 其中,0和1代表维数 | 上限=下限+维长-1 迭代: for (int i = zz.GetLowerBound(0); i <= zz.GetUpperBound(0); i++) for (int j = zz.GetLowerBound(1); j <= zz.GetUpperBound(1); j++) |
下限 | arr.GetUpperBound(0) | - |
维长 | arr.GetLength(0) | - |
维数 | arr.Rank | 具体指几维,一维、二维、三维、四维… 四维数组就是好几天里每天来一群人排成三维数组,某人的位置就是第几天 来的第几层的第几行的第几个人。 |
数组中元素总数 | arr.Length | 数组中元素总数 = arr.GetLength(0) * arr.GetLength(1) // 各维度维长乘积 |
IEnumerator | - | 迭代: System.Collections.IEnumerator myIEnumerator = myArr.GetEnumerator(); while (myIEnumerator.MoveNext() && myIEnumerator.Current != null) |
SetValue | - | ff.SetValue(12, 0); // 12为要设置的值,0为索引位置 |
CreateInstance | - | int[] mm = new int[2] { 3, 5 }; // 数组zz的维长 int[] nn = new int[2] { 2, 3 }; // 数组zz的下限 string[,] zz = (string[,])Array.CreateInstance(typeof(string), mm, nn); static Array ReDim(Array a, int newSize) { Array nn = Array.CreateInstance(a.GetType().GetElementType(), newSize); int len = newSize > a.Length ? a.Length : newSize; Array.Copy(a, 0, nn, 0, len); // a为源数组,0为维度,nn为新数组 return nn; }
|
数组转换 | - | 值类型数组不能进行数组转换;两种类型需存在显示或隐示转换 nn[,] nns = new nn[3, 2]; // mm、nn为自定义类 mm[,] rcs1 = (mm[,])nns; object[,] aa = (object[,])nns; |
7.集合类
集合类 | 声明方式 | 用法 |
ArrayList | ArrayList nn = new ArrayList(); | 可变长数组 |
Hashtable | Hashtable mm = new Hashtable(); | 表示键值对的集合,Hashtable将添加元素放在System.Collections.DictionaryEnty对象中,所以在使用foreach或IEnumerator的Current属性时,应该将Hashtablet元素转换为DictionaryEnty对象 IEnumerator e = mm.GetEnumerator(); while (e.MoveNext()) { DictionaryEntry de = (DictionaryEntry)e.Current; Console.WriteLine("{0}-{1}", de.Key, de.Value); } |
Dictionary 【键值对】 | Dictionary<int, string> mm = new Dictionary<int, string>(); | Hashtable和Dictionary比较类似,两者具体使用如下:
|
Queue | Queue mm = new Queue(); | Queue和ArrayList比较相似:
|
SortedList | SortedList sl = new SortedList(); |
|
Stack | Stack sk = new Stack(); | 后进先出 |
8.接口【参见代码】
接口可以继承多个接口,但不能继承类;
类可以继承多个接口,也可以继承类,但只能继承一个类;
接口必须实现了才能使用,实现接口必须实现接口中的方法和属性,接口的实现方法通常为public;
可参见代码:自定义集合类【接口】
注:ArrayList的Sort方法是利用接口IComparable来进行排序的,所以ArrayList中的每个对象都需要实现IComparable接口,int、string等系统已定义类型已经实现了IComparable接口。
9.迭代器【参见代码】
用途 | 语法 | 规则 |
实现foreach迭代 | Foreach(...) { yield return 成员; … yield break; } | 如果要迭代一个类则使用GetEnumerator(),返回类型是Enumerator;如果要迭代一个类成员则使用Enumerable |
10.继承
特性 | 声明 | 描述 |
隐藏类成员 | Class mm{ public void chuli() {} } Class nn:mm { new public void chuli() {} } | 使用关键字new来明确涉及要隐藏基类的同名成员chuli() |
重写 | Class mm{ public virtual void G(){} } Class nn:mm{ public override void G(){} } |