溫馨提示×

c# getset 支持哪些特性

c#
小樊
104
2024-11-30 13:59:42
欄目: 編程語言

C#中的get和set關鍵字用于定義屬性的訪問器。這些訪問器可以支持以下特性:

  1. 自動實現屬性:在C# 3.0及更高版本中,可以使用自動實現的屬性來簡化屬性的定義。自動實現的屬性會自動生成get和set訪問器,而無需顯式編寫代碼。例如:

    public class MyClass
    {
        public int MyProperty { get; set; }
    }
    
  2. 只讀屬性:如果只需要讀取屬性值而不允許修改它,可以將set訪問器聲明為無效。這可以通過將set訪問器聲明為private或protected來實現。例如:

    public class MyClass
    {
        public int MyProperty { get; private set; }
    }
    
  3. 只寫屬性:如果只需要修改屬性值而不允許讀取它,可以將get訪問器聲明為無效。這可以通過將get訪問器聲明為private或protected來實現。例如:

    public class MyClass
    {
        private int _myProperty;
    
        public int MyProperty
        {
            get { return _myProperty; }
            private set { _myProperty = value; }
        }
    }
    
  4. 驗證屬性:可以在set訪問器中添加代碼來驗證屬性值的合法性。如果屬性值不符合要求,可以拋出異?;蛟O置默認值。例如:

    public class MyClass
    {
        private int _myProperty;
    
        public int MyProperty
        {
            get { return _myProperty; }
            set
            {
                if (value >= 0)
                    _myProperty = value;
                else
                    throw new ArgumentException("Value must be non-negative.");
            }
        }
    }
    
  5. 通知屬性更改:當屬性值更改時,可能需要通知其他類或對象??梢酝ㄟ^實現INotifyPropertyChanged接口并在set訪問器中觸發PropertyChanged事件來實現。例如:

    public class MyClass : INotifyPropertyChanged
    {
        private string _myProperty;
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        public string MyProperty
        {
            get { return _myProperty; }
            set
            {
                if (_myProperty != value)
                {
                    _myProperty = value;
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyProperty)));
                }
            }
        }
    }
    

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女