在C#中
get
和 set
是访问器(accessors
)的关键词,它们用于定义属性的读取和写入行为。属性是一种特殊的类成员,它提供了对字段(field
)或计算结果的灵活访问。
get 访问器
get
访问器用于读取属性的值。当你尝试访问一个属性时,get
访问器会被调用,并返回属性的值。你可以在其中添加任何你需要的逻辑,比如计算属性的值,或者返回缓存的值等。
set 访问器
set
访问器用于写入属性的值。当你尝试给属性赋值时,set 访问器会被调用。你可以在 set 访问器中添加验证逻辑,比如检查新值是否满足某些条件,或者在赋值前对新值进行转换。
属性的优势
属性提供了一种比公共字段更灵活和可控的方式来访问类的数据。通过属性,你可以:
验证数据
在 set
访问器中验证新值是否有效。
计算值
在 get
访问器中根据其他字段的值计算属性的值。
控制访问
限制对属性的访问,比如只允许读取不允许写入,或者只允许在特定条件下进行访问。
隐藏实现细节
通过属性,你可以隐藏字段的实际名称和类型,只暴露一个清晰的接口给类的使用者。
例子
public class Person
{
private string _name;
private int _age;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set
{
if (value >= 0)
{
_age = value;
}
else
{
throw new ArgumentOutOfRangeException(nameof(value),
"Age cannot be negative.");
}
}
}
}
在这个示例中,Name
属性有一个简单的 get
和 set
访问器,而 Age
属性在 set
访问器中添加了验证逻辑,确保年龄不能为负数。