属性通过属性访问器访问,即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
原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/274034.html