温馨提示×

c# getset 支持哪些特性

c#
小樊
83
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访问器中添加代码来验证属性值的合法性。如果属性值不符合要求,可以抛出异常或设置默认值。例如:

    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