C#规范解读之心得 1

(全部翻译过来太累了,只选重点供大家参考)

1c#中的运算符

 运算符有优先级和结合性。优先级很明白,结合性的意思是:当两个优先级相同的运算符出现在一个操作数的两边时,是从左还是从右开始计算。

比如:所有二元运算符除赋值运算符以外,都是左结合的。如x+y+z是这样计算的:(x+y+z,即先计算x+y的值,这个值再加上z,作为表达式最终的值。

对于赋值运算符,x=y=z,则是这样计算的:x=(y=z),说明赋值运算符是右结合的。

C#中的唯一一个三元运算符,?:条件运算符也是右结合的,比如false ? 4 : false ? 1 : 2是这样计算的:false ? 4 : false ? 1 : 2),而不是(false ? 4 : false ? 1 : 2,这样不符合语法。

2)类及访问性

常量,字段,方法,属性,事件,索引器,运算符,实例构造函数,析构函数,静态构造函数,内部类型定义(共11个)。泛型类还可以包括一个或多个类型参数。

每一个成员都可以设置可访问性。成员的访问级别有5种:

publicprotectedinternalprotected internalprivate,从左到右访问性逐步降低

当然,要访问某个类的成员,首先要能访问到这个类。类的访问级别共2中,internalpublic,默认是internalinternal是指“一个程序集的内部”,(C#的程序集有两种,exedll)。

可访问性的意思,比如说,如果一个类A的访问级别是internal,即这样定义类A

class A{…}internal A{},把这个类编译成动态连接库:a.dll。再写一个类BB的类体中不能 出现 A这个类型(另外定义又当别论),即使编译时引用了a.dll(编译时指定/r:a.dll)。

但如果A定义成public A{…},在B的类体中就能出现A这个类型了(编译时指定/r:a.dll),B可以有类型是A的字段,B的方法中也可以声明类型为A的局部变量。但A中的成员的访问性又受到成员的访问修饰符的影响,假如B有类型为A的字段aa,A类中有方法void F()。如果这样定义:public void F(){}B的成员aa可以调用F方法,意为“可见”。如果这样定义: internal void F(){}void F(){}(private F(){}),则aa不能调用F方法,意为“不可见”。

 

 

 

posted on 2009-03-26 22:46  apple123  阅读(270)  评论(0编辑  收藏  举报