C# 编程指南
如何:声明和使用读/写属性(C# 编程指南)
属性可以提供公共数据成员的便利,而又不会带来不受保护、不受控制以及未经验证访问对象数据的风险。这是通过“访问器”来实现的:访问器是为基础数据成员赋值和检索其值的特殊方法。使用
set 访问器可以为数据成员赋值,使用
get 访问器可以检索数据成员的值。
此示例演示 Person 类,该类具有两个属性:Name (string) 和 Age (int)。这两个属性都提供
get 和
set 访问器,因此它们被视为读/写属性。
示例
C#
复制代码
class
Person
{
private
string
m_name =
"N/A"
;
private
int
m_Age = 0;
// Declare a Name property of type string:
public
string
Name
{
get
{
return
m_name;
}
set
{
m_name = value;
}
}
// Declare an Age property of type int:
public
int
Age
{
get
{
return
m_Age;
}
set
{
m_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:
System.Console.WriteLine(
"Person details - {0}"
, person);
// Set some values on the person object:
person.Name =
"Joe"
;
person.Age = 99;
System.Console.WriteLine(
"Person details - {0}"
, person);
// Increment the Age property:
person.Age += 1;
System.Console.WriteLine(
"Person details - {0}"
, person);
}
}
输出
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
可靠编程
在上面的示例中,Name 和 Age 属性是
公共的,并且同时包含 get 和 set 访问器。这允许任何对象读写这些属性。不过,有时需要排除其中的一个访问器。例如,省略 set 访问器将使该属性成为只读的:
C#
复制代码
public
string
Name
{
get
{
return
m_name;
}
}
此外,您还可以公开一个访问器,而使另一个访问器成为私有的或受保护的。有关更多信息,请参见
非对称访问器可访问性。
声明了属性后,可像使用类的字段那样使用这些属性。这使得获取和设置属性值时都可以使用非常自然的语法,如以下语句中所示:
C#
复制代码
person.Name =
"Joe"
;
person.Age = 99;
注意,属性
set 方法中可以使用一个特殊的 value 变量。该变量包含用户指定的值,例如:
C#
复制代码
m_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 调用来调用。
(来源:msdn )