字段
字段是包含在类或结构中的对象或值。字段使类和结构可以封装数据。
为了简单起见,这些示例使用public字段,但是不建议这样做。字段通常应为private。外部类应当通过方法、属性或索引器来间接访问字段。
字段存储类要满足其设计所需要的数据。例如,表示日历日期的类可能有三个整数字段:一个表示月份,还有一个表示年份。在类块中声明字段的方式如下:指定字段的访问级别,然后指定字段的名称。例如:
public class CalendarDate
{
public int month;
public int day;
public int year;
}
访问对象中的字段是通过名称后面依次添加一个句点和该字段的名称来实现的,具体形式为objectname.fieldname。例如:
CalendarDate birthday = new CalendarDate();
birthday.month = 7;
声明字段时可以使用赋值运算符为字段指定一个初始值。例如,若要自动将7赋给month字段,需要按如下方式声明month:
public class CalendarDateWithInitialization
{
public int month = 7;
//...
}
字段恰好在调用对象实例的构造函数之前初始化,所以,如果构造函数为字段分配了值,则它将改写字段声明期间给定的任何值。
注意:字段初始值设定项不能引用其他实例字段。
字段可标记为public、private、protected、internal或protected internal。这些访问修饰符定义类的使用者访问字段的方式。
可以选择将字段声明为static。这使得调用方在任何时候都能使用字段,即使类没有任何实例。
可以将字段声明为readonly。只读字段只能在初始化期间或在构造函数中赋值。Staticreadonly字段非常类似于常数,只不过C#编译器不能在编译时访问静态只读字段的值,而只能在运行时访问。
常量
类和结构可以将常数声明为成员。常数是在编译时已知并保持不变的值。(若要创建在运行时初始化的常数值,请使用readonly关键字。)常数被声明为字段,声明时在字段的类型前面使用const关键字。常数必须在声明时初始化。例如:
class Calendar1
{
public const int months = 12;
}
在此示例中,常数months将始终将为12,不能更改-即使是该类自身也不能更改它。常数必须属于整型(sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool或string)、枚举或对null的引用。
可以同时声明多个相同类型的常数,例如:
class Calendar2
{
const int months = 12, weeks = 52, days = 365;
}
只要不会造成循环引用,用于初始化一个常数的表达式就可以引用另一个常数。例如:
class Calendar3
{
const int months = 12;
const int weeks = 52;
const int days = 365;
const double daysPerWeek = days / weeks;
const double daysPerMonth = days / months;
}
常数可标记为public、private、protected、internal或protectedinternal。这些访问修饰符定义类的用户访问该常数的方式。
尽管常数不能使用static关键字,但可以像访问静态字段一样访问常数。未包含的定义常数的类中的表达式必须使用类名、一个句点和常数名来访问该常数。例如:
int birthstones = Calendar.months;