更新:2007 年 11 月
属性可以提供公共数据成员的便利,而又不会带来不受保护、不受控制以及未经验证访问对象数据的风险。这是通过“访问器”来实现的:访问器是为基础数据成员赋值和检索其值的特殊方法。使用
此示例演示 Person 类,该类具有两个属性:Name (string) 和 Age (int)。这两个属性都提供 get 和 set 访问器,因此它们被视为读/写属性。
示例
C# | 复制代码 |
---|---|
class Person { private string name = "N/A"; private int age = 0; // Declare a Name property of type string: public string Name { get { return name; } set { name = value; } } // Declare an Age property of type int: public int Age { get { return age; } set { age = value; } } public override string ToString() { return "Name = " + Name + ", Age = " + Age; } } class TestPerson { static void Main() { // Create a new Person object: Person person = new Person(); // Print out the name and the age associated with the person: Console.WriteLine("Person details - {0}", person); // Set some values on the person object: person.Name = "Joe"; person.Age = 99; Console.WriteLine("Person details - {0}", person); // Increment the Age property: person.Age += 1; Console.WriteLine("Person details - {0}", person); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: Person details - Name = N/A, Age = 0 Person details - Name = Joe, Age = 99 Person details - Name = Joe, Age = 100 */ |
可靠编程
在上面的示例中,Name 和 Age 属性是
C# | 复制代码 |
---|---|
public string Name { get { return name; } } |
此外,您还可以公开一个访问器,而使另一个访问器成为私有的或受保护的。有关更多信息,请参见
声明了属性后,可像使用类的字段那样使用这些属性。这使得获取和设置属性值时都可以使用非常自然的语法,如以下语句中所示:
C# | 复制代码 |
---|---|
person.Name = "Joe";
person.Age = 99;
|
注意,属性 set 方法中可以使用一个特殊的 value 变量。该变量包含用户指定的值,例如:
C# | 复制代码 |
---|---|
name = value;
|
请注意用于使 Person 对象上的 Age 属性递增的简洁语法:
C# | 复制代码 |
---|---|
person.Age += 1; |
如果将单独的 set 和 get 方法用于模型属性,则等效代码可能类似于:
复制代码 | |
---|---|
person.SetAge(person.GetAge() + 1); |
本示例中重写了 ToString 方法:
C# | 复制代码 |
---|---|
public override string ToString() { return "Name = " + Name + ", Age = " + Age; } |
注意,程序中未显式使用 ToString。默认情况下,它由 WriteLine 调用来调用。