属性提供了公共数据成员的便利性,且不会产生未受保护、不可控制和未经验证地访问对象的数据的风险。 属性声明访问器:从基础数据成员中赋值和检索值的特殊方法。 set 访问器可分配数据成员,get 访问器检索数据成员值。
此示例演示具有两个属性的 Person 类:Name(字符串)和 Age(整型)。 这两个属性均提供 get 和 set 访问器,因此它们被视为读/写属性。
示例
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;}
}public class Wrapper
{private string _name = "N/A";public string Name{get{return _name;}private set{_name = value;}}}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 = 0Person details - Name = Joe, Age = 99Person details - Name = Joe, Age = 100
*/
可靠编程
在前面的示例中,Name 和 Age 属性为 public,同时包含 get 和 set 访问器。 公共访问器使得任何对象均可读取和写入这些属性。 但是,有时需要排除其中的一个访问器。 可以省略 set 访问器以使属性为只读:
public string Name
{get{return _name;}private set{_name = value;}
}
或者,可以公开一个访问器,但使另一个访问器为私有或受保护。
声明属性后,便可将这些属性用作类的字段。 在获取和设置属性的值时,属性允许一种自然的语法,如以下语句所示:
person.Name = "Joe";
person.Age = 99;// 1. 在属性 set 方法中,特殊的 value 变量为可用。 此变量包含用户指定的值,例如:
_name = value;// 2. 请注意在 Person 对象上递增 Age 属性的简洁语法:
person.Age += 1;// 3. 如果将单独的 set 和 get 方法用于模型属性,则等效的代码可能如下所示:
person.SetAge(person.GetAge() + 1);// 4. ToString 方法在此示例中被重写:
public override string ToString()
{return "Name = " + Name + ", Age = " + Age;
}// 5. 请注意,ToString 未显式用于程序中。 默认情况下,通过 WriteLine 调用对其进行调用。