更新:2007 年 11 月
“字段”是直接在
类或结构可以拥有实例字段或静态字段,或同时拥有两者。实例字段特定于类型的实例。如果您拥有类 T 和实例字段 F,可以创建类型 T 的两个对象,并修改每个对象中 F 的值,这不影响另一对象中的该值。相比之下,静态字段属于类本身,在该类的所有实例中共享。从实例 A 所做的更改将立刻呈现在实例 B 和 C 上(如果它们访问该字段)。
通常应仅为具有私有或受保护可访问性的变量使用字段。您的类向客户端代码公开的数据应通过
字段通常存储这样的数据:该数据必须可供多个类方法访问,并且其存储期必须长于任何单个方法的生存期。例如,表示日历日期的类可能有三个整数字段:一个表示月份,一个表示日期,还有一个表示年份。不在单个方法范围外部使用的变量应在方法体自身范围内声明为局部变量。
在类块中通过指定字段的访问级别,然后指定字段的类型,再指定字段的名称来声明这些字段。例如:
C# | 复制代码 |
---|---|
public class CalendarEntry { // private field private DateTime date; // public field (Generally not recommended) public string day; // Public property exposes date field safely. public DateTime Date { get { return date; } set { if(value.Year > 1980 || value.Year <= 2008) { date = value; } else throw new ArgumentOutOfRangeException(); } } // Public method also exposes date field safely. public void SetDate(string dateString) { DateTime dt = Convert.ToDateTime(dateString); if (dt.Year > 1980 || dt.Year <= 2008) { date = dt; } else throw new ArgumentOutOfRangeException(); } public TimeSpan GetTimeSpan(string dateString) { DateTime dt = Convert.ToDateTime(dateString); if (dt != null && dt.Ticks < date.Ticks) { return date - dt; } else throw new ArgumentOutOfRangeException(); } } |
若要访问对象中的字段,请在对象名称后面添加一个句点,然后添加该字段的名称,比如 objectname.fieldname。例如:
C# | 复制代码 |
---|---|
CalendarEntry birthday = new CalendarEntry(); birthday.day = "Saturday"; |
声明字段时可以使用赋值运算符为字段指定一个初始值。例如,若要自动将 "Monday" 赋给 day 字段,需要声明 day,如下例所示:
C# | 复制代码 |
---|---|
public class CalendarDateWithInitialization { public string day = "Monday"; //... } |
字段的初始化紧靠调用对象实例的构造函数之前。如果构造函数为字段赋值,则该值将覆盖字段声明期间给出的任何值。有关更多信息,请参见使用构造函数(C# 编程指南)。
说明: |
---|
字段初始值设定项不能引用其他实例字段。 |
字段可标记为
可以选择将字段声明为
可以将字段声明为
C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:
1.6.5 字段
10.5 字段