static readonly与const的变量作用是一样的无论访问修饰符是不是public还是其它(privateprotectedinternal)变量名称一般为大写中间以下划线
public static readonly int MAX_HEIGHT;
public const int MIN_HEIGHT = ;
有些程序员对大写不敏感上例中MAX_HEIGHT用Max_Height代替也未尝不可甚至MaxHeight也可以在Net类库中intMaxValue与intMinValue便是这样定义的
const常量更确切的说是编译时常量因为它在运行时是不存在的在编译中所有变量引用将被实际值替掉而static readonly则不然它在运行时也是存在的从原理上讲论效率const优于static readonly但是在一个比较在的项目中在dll局部升级时如果改变了某个const变量的值而未升级的dll如果也有这个const变量的话显而易见这时候问题将是产生如果因此而升级全部dll反而不值所以在大型多变应用中建议使用static readonly代替const其微乎其微的效率的减损对比升级布置可能出现的问题还是可以接受的
除了以上两种静态只读和常量变量之外其它变量命名均以下划线开始访问修改符为private(不建议命名为internalprotected更不建议命名为public)
private static int _maxHeight;
private int _minHeight; 如果其命名不前置下划线易与参数变量混淆
对于下面这种定义
private int _minHeight = default(int);
public int MinHeight
{
set{
_minHeight = value;
}
get{
return _minHeight;
}
}
初学者可能觉得有点画蛇添足不如直接命名为
public int MinHeight; 这样岂不简单干吗还要用getter和setter封装起来额外的函数调用也使效率有损
有时候在开发项目时开始时我们要画的可能只是一条蛇但是项目后期需求变了改画一条龙了所以在项目初期画蛇的时候添上一对足还是很有远见的
getter与setter(属性存取器)可以像方法一样封装逻辑并且像变量一样使用建议所有非静态只读和常量定义为private然后给其添加相应属性存取器用于赋值与读取在其它方法体内(包涵类外与类内)不建议直接读写变量即使它目前可以被直接读写我们也要通过调用属性存取器也调用这一点有点麻烦但很重要很高老手有时也会犯错误如下所示
private int _minHeight = intMinValue;
public int MinHeight//或者是protectedinternal甚至是private
{
set{
_minHeight = value;
//即使这里目前没有其它处理逻辑
}
get{
return _minHeight;
}
}
public void Method(int minHeight)
{
thisMinHeight = minHeight;//在这里不要使用this_minHeight直接读写
//
}
即使变量的访问是受保护的或者或者是私有的也要使用属性存取器
原则是对于变量的读取要用属性存取器封装无论其访问修饰符如何即使其属性存取器内除了存取目前没有任何其它逻辑