C# 中的属性
属性通过属性访问器访问,即get;set;方法
语法
- 没有显示声明get;set;方法
public class Person
{
public string FirstName;
// 没有显示声明get;set;方法
}
- 显示声明get;set;
public class Person
{
public string FirstName { get; set; }
}
- 给属性一个默认值,对于只读属性有最大作用
public class Person
{
public string FirstName { get; private set; } = "zhangsan";
}
- 自定义存储,即声明一个field控制属性赋值读取
public class Person
{
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
private string firstName;
}
- 升级一下使用lamda表达式
public class Person
{
public string FirstName
{
get => firstName;
set => firstName = value;
}
private string firstName;
}
- 限制只在构造函数初始化属性
public class Person
{
public Person(string firstName) => this.FirstName = firstName;
public string FirstName { get; }
}
- 计算属性
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
- 缓存计算属性
public class Person
{
private string firstName;
public string FirstName
{
get => firstName;
set
{
firstName = value;
fullName = null;
}
}
private string lastName;
public string LastName
{
get => lastName;
set
{
lastName = value;
fullName = null;
}
}
private string fullName;
public string FullName
{
get
{
if (fullName == null)
fullName = $"{FirstName} {LastName}";
return fullName;
}
}
}
- 不被序列化
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
[field:NonSerialized]
public int Id { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
- 观察者模式
public class Person : INotifyPropertyChanged
{
public string FirstName
{
get => firstName;
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException("First name must not be blank");
if (value != firstName)
{
firstName = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(FirstName)));
}
}
}
private string firstName;
public event PropertyChangedEventHandler PropertyChanged;
// remaining implementation removed from listing
}
参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/properties
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2021-07-13 WPF 踩坑笔记3 创建wpf样式类库 styling