C# 中的属性

2022/7/13 14:20:16

本文主要是介绍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



这篇关于C# 中的属性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程