C#规范解读之心得 1
(全部翻译过来太累了,只选重点供大家参考)
(1)c#中的运算符
比如:所有二元运算符除赋值运算符以外,都是左结合的。如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种:
public、protected、internal、protected internal、private,从左到右访问性逐步降低 。
当然,要访问某个类的成员,首先要能访问到这个类。类的访问级别共2中,internal和public,默认是internal。internal是指“一个程序集的内部”,(C#的程序集有两种,exe和dll)。
可访问性的意思,比如说,如果一个类A的访问级别是internal,即这样定义类A:
class A{…}或internal A{},把这个类编译成动态连接库:a.dll。再写一个类B,B的类体中不能 出现 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方法,意为“不可见”。