C#程序设计基础
1。c#对无符号整形提供了相应的关键字:uint ,ulong,ushort
2.创建二维数组的语法 int[,] sample=new int[20,50];
3.switch语句中表达式可以整型、枚举类型、string类型,不允许使用浮点数。
4。c#中运算符重载函数的运算符参数不允许使用ref和out修饰。
5。C#语言禁止对“=”进行运算符重载。
6。索引器
class MAT{
public int dim1,dim2;
public double[,] ele;
public MAT(int m,int n){
dim1=m;
dim2=n;
ele=new double[m,n];
}
public double this[int index1, int index2]{
get{
return ele[index1,index2];
}
set{
ele[index1,index2]=value;
}
}
}
7. is 类型判断
bool result=instance is 类型名;
使用is关键字进行类型判断,能判断对象是否是指定的类型或派生类型,也可以判断是否实现了指定的接口,而且这个过程不会报错。
8。可访问级别
protected: 只有类型内部或从其派生的类型可以访问它,超出这个范围就不能访问了。
internal : 使用internal描述的类型和类型成员只在程序集内部是可见的,其效果在程序集内部等价于public,而在程序集外等价于private .这里的一个程序集相当于vs里面的一个项目,(注:一个解决方案下面可能有多个项目)。
在C#中定义一个类或一个数据成员没有指定访问级别时,默认的访问级别是internal的,而不是private或者public .
btw,复习一下Java中访问控制级别
java中无任何访问控制修饰符,默认为default。同一包下的类可操作。
protected变量:同一包下的类可操作。不同包下在以下情况也可操作:两个类是父子关系。
所以在java中访问权限级别为:private < default < protected < public
9。static class 静态类
在静态类中不能定义非静态的成员。一般对静态类不生成其对象,而且貌似也不能实例化。(构造函数对静态类来讲没有任何意义,因为静态类没有非静态数据成员)。
10。sealed class 密封类
被关键字sealed 修饰的类是密封类,密封类可以继承自其他类,但不能被继承,不能含有虚方法和抽象方法。
由于密封类不能被继承,不能被拓展,这可能会影响系统的可扩展性,的以实际中用得比较少。
11。在c#中,只有在属性的“set”代码块中,关键字value才有效,其他地方出现value必定是某个标识符,而不是关键字。
12。C#中的方法
一个方法中有若干个参数,对于值类型的参数,C#默认是按照值传递的,但可以使用关键字out或ref来实现按引用传递;对于引用类型的参数,永远是按照引用传递的。
tips:在编程过程尽量少用l因为其比较容易与1混淆。o类似。
ref和out的使用与区别 - JRoger - 博客园
http://www.cnblogs.com/sjrhero/articles/1922902.html总结:
区别:
ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
out
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。(这与ref不同,ref参数在方法体内不强制修改参数值,可修改,也可不修改。)
属性不是变量,不能作为 out 参数传递。
ref是 有进有出,而out是 只出不进。
13。事件
public event EventHandler NameChanged =null ;
EventHandler是事件采用的委托类型,“=null”表示事件的初始值为空,即相应的委托类型未绑定任何函数。
- 定义相应的函数来触发事件,代码如下:
private void RaiseNameChangedEvent(){
if(NameChanged!=null){
//public delegate void EventHandler(object sender, EventArgs e); 触发事件的方法相当于是应用了EventHandler委托的语法。
NameChanged(this,null);
}
}
从便于理解的角度看,可以将事件看作是一种比较特殊的手段,它是一种列表,能存储若干个委托对象,从而能动态地绑定若干个方法。
14。在c#中定义一个抽象方法
public abstract int Sum(int a,int b); //没有函数体
抽象成员必须出现在抽象类中,而且在抽象类派生新类型时,所有的抽象方法必须重写以填充方法体。
抽象方法和虚拟成员是有区别的,抽象成员不能定义任何实质性的功能,必须被重载;而虚拟成员必须包含完整的代码结构,可以包含实质性功能,可以不被重载。
15。被const关键字修饰的成员字段为常数字段,可以使用”类型名称.字段名”的方式进行引用。
16。foreach循环结构 本质上是一个语法封装,而且不能在循环内更改元素的值。
foreach(string name in names)