天天小知识
C#小知识(2)
4.运算符优先级
很多人写了一个稍微复杂一点的式子就一直出错。很有可能是操作符的优先级没有考虑。这里把C#的操作符按照从高到低的顺序排列下来
---------------------------------------------
1.初级操作符 () x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked
2.一元操作符 + - | ~ ++x --x (T)x
3.乘除操作符 * / %
4.加减操作符 + -
5.位移操作符 << >>
6.关系操作符 < > <= >= is
7.等于操作符 ==
8.逻辑与 &
9.逻辑异或 ^
10.逻辑或 |
11.条件与 &&
12.条件或 ||
13.条件操作符 ?:
14.赋值操作符 = *= /= %= += -= <<= >>= &= ^= |=
---------------------------------------------
要注意的是,位移操作符是算数操作里面优先级最低的。所以要注意是否要加括号。
最后,提醒一句,如果实在是搞不清楚,你就记着一点,乘除高于加减,其他都包括号,保证没问题哈。
5.ref和out
如果玩过C语言的话,那应该知道函数参数传递有一种引用的方法:void f(int& a)
那么,在C#里面如何实现呢?其实,ref和out两个关键字都可以说明让编译器传递变量的地址。它们的使用方法如下:
函数声明:void f(ref int a, out int b),调用函数:f(ref a,out b);
那么,他们有区别的吧。的确,他们的区别就是ref传递的必须是已经初始化的变量,而out没有这个限制(不过这时候在函数体内必须对out进行初始化,而且传入的变量要声明)。譬如说:
void f(ref System.Windows.Forms.Form a){a=new System.Windows.Forms.Form();...}
pubilc static void Main()
{
System.Windows.Forms.Form myForm;
f(ref myForm);//出错!myForm必须初始化使用。把这里的所有ref改成out就不会出错了
}
另外,函数参数只有ref和out不同时编译器把他们看作同一个函数,因此不支持重载。也就是说:
void f(ref int a);
void f(out int a);
会出错的。
最后说一下out的用处。其实根据out的意思我们就能推测,事实上out关键字给了我们一个方法,使函数能返回许多值。传入out的值不必初始化,传出的值在函数内完成初始化并赋值。这是函数返回一个值的绝佳途径啊。