在C#中,get
和set
是属性(Property)的访问器,用于控制对类或结构体字段的读写操作。以下是详细说明:
get
和set
访问器提供对私有字段的封装,实现数据的安全访问。get
:读取属性值时调用,返回字段值。set
:设置属性值时调用,通过value
关键字传递新值。private string _name; // 私有字段
public string Name
{
get { return _name; } // 读取
set { _name = value; } // 写入
}
public string Name { get; set; } // 自动实现
public string ReadOnlyName { get; } = "Default"; // 仅get
public string WriteOnlyName { set { _name = value; } } // 仅set
public string Name { get; private set; } // 外部只读,内部可写
private int _age;
public int Age
{
get { return _age; }
set
{
if (value >= 0)
_age = value; // 校验逻辑
}
}
get
/set
中添加逻辑(如校验、计算)。get
中初始化资源)。INotifyPropertyChanged
)。FullName
由FirstName
和LastName
拼接)。public string Name
{
get { return Name; } // 错误:递归调用自身
set { Name = value; } // 错误
}
解决:确保get
/set
操作的是私有字段(如_name
),而非属性本身。
public List<string> Items { get; set; } // 可能为null
解决:初始化属性:
public List<string> Items { get; set; } = new List<string>();
解决:对多线程场景,使用锁或Immutable
类型:
private readonly object _lock = new object();
private string _data;
public string Data
{
get { lock(_lock) { return _data; } }
set { lock(_lock) { _data = value; } }
}
public string FullName => $"{FirstName} {LastName}";
public Person Person { get; init; } // 仅对象初始化时可赋值
public string Description => this switch
{
{ Age: < 18 } => "Child",
_ => "Adult"
};
通过合理使用get
和set
,可以提升代码的可维护性和安全性。
没有搜到相关的文章