C#中的get和set關鍵字用于定義屬性的訪問器。這些訪問器可以支持以下特性:
自動實現屬性:在C# 3.0及更高版本中,可以使用自動實現的屬性來簡化屬性的定義。自動實現的屬性會自動生成get和set訪問器,而無需顯式編寫代碼。例如:
public class MyClass
{
public int MyProperty { get; set; }
}
只讀屬性:如果只需要讀取屬性值而不允許修改它,可以將set訪問器聲明為無效。這可以通過將set訪問器聲明為private或protected來實現。例如:
public class MyClass
{
public int MyProperty { get; private set; }
}
只寫屬性:如果只需要修改屬性值而不允許讀取它,可以將get訪問器聲明為無效。這可以通過將get訪問器聲明為private或protected來實現。例如:
public class MyClass
{
private int _myProperty;
public int MyProperty
{
get { return _myProperty; }
private set { _myProperty = value; }
}
}
驗證屬性:可以在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.");
}
}
}
通知屬性更改:當屬性值更改時,可能需要通知其他類或對象??梢酝ㄟ^實現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)));
}
}
}
}