基本语法2


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

19, C#的数组

C#的数组都是对象,继承自Array类,故都拥有属性及方法,如Rank,数组的维数,equals等。而java中的数组只有一个length属性。 Array intArray1 = Array.CreateInstance(typeof(int), 5); 等同于:int[] intArray1 = new int[5]; int[] intArray2 = (int[])intArray1;

除一般数组外,C#支持不规则数组如: int[][] jagged = new int[3][];
jagged[0] = new int[2] { 1, 2 };
jagged[1] = new int[6] { 3, 4, 5, 6, 7, 8 };
jagged[2] = new int[3] { 9, 10, 11 };
20,操作符:
is 判断左是否是右类型
as 类型转换

21,运算符重载
Vector x = new Vector ( 1,1 ); Vector y = new Vector (2,2)
Vector z = x + y // 或者用point z = x.add( y ); 但显然前者更直观。

实现:方法为public , static 运算符前加operator: public static Vector operator + (Vector lhs, Vector rhs)
{
Vector result = new Vector(lhs);
result.x += rhs.x;
result.y += rhs.y;
result.z += rhs.z;
return result;
} //此时 x + y会执行此方法,实际上,当出现运算符时,c#都先在左,右操作数的方法找是否具有重载此操作符的方法,且此方法参数与给出的操作符左右操作数相同,若相同,执行之。
x = 2 * x public static Vector operator * (int lhs, Vector rhs)
{
Vector result = new Vector(lhs);
result.x = 2 * rhs.x;
result.y += 2 * rhs.y;
return result;
} 若是x = x * 2 则不会执行,因为形参不匹配,此时需要再定义一个 public static Vector operator * (Vector rhs,int lhs )
{
return lhs * rhs;
}
能重载的运算符有: +, *, /, -, %
+, -, ++, —
&, |, ^, <<, >>
!, ~true, false
==, !=,>=, <=>, <, //没有 = 此外: true false;== !=; > <; >= <=; 重载时重载一个,另一个必须重载且返回结果要为boolean ,在重载了 + 之后相当于重载了+= ,+=不能显式重载 22, 委托 --- 类是数据,方法也可当做数据,也能被赋值。 using System; public partial class AA { public delegate string show( string name ); public string list( string name ) { return "hdello world " + name; } public static void Main(){ AA a = new AA(); //show _show = new show(a.list); show _show = a.list; Console.Write(_show("123")); Console.Write(a.go( _show )); } public string go( show _show ){ return _show("345"); } } 委托可当做类来看待,即委托方法就是一个类,可用new来创建,同js,不同js的方法当成类还可以有属性。 委托不要方法体, 前要加关键字 delegate 调用:委托方法 + 括号, 直接用,不用创建对象引用。 方法当做变量来看,在赋值,传参时当然不要用(), 只有在调用时才用() 委托还可以进行 + , - 操作,一次运行多个方法,但方法返回值最好为void,否则后者会将前者覆盖掉 using System; public partial class AA { public delegate void show( string name ); public void list( string name ) { Console.Write("hdello world " + name); } public void list1( string name ) { Console.Write( "list1 world " + name); } public static void Main(){ AA a = new AA(); show _show = a.list; _show += a.list1; _show("123"); } } 23,集合 Hashtable ht = new Hashtable(); foreach (DictionaryEntry de in myHT) { Console.Write( dr.key + dr.value ); } 取值: ht["name"] //注意,因为HashTable是按散列排序,不是数据那种位置类的,故它的输出与add的位置不同。 IList接口 List 提供范型 List list = new List(); list[0]
java中接口与范型都是List