在 C# 中實現只讀屬性
今天我們將學習如何在 C# 中建立一個只讀屬性,使其只能讀取而不能修改。
在 C#
中初始化時宣告變數的只讀屬性
我們在最後兩篇文章中研究了 CAR
類。讓我們使用同一個類並嘗試實現一個只讀屬性。假設我們的類 CAR
有一個稱為 maker_id
的屬性,出於安全目的,我們希望將其保持為只讀。
class CAR {
private readonly int maker_id;
public CAR(int maker_id) {
this.maker_id = maker_id;
}
public int get_maker_id() {
return maker_id;
}
}
static void Main(String[] args) {
CAR x = new CAR(5);
Console.WriteLine(x.get_maker_id());
}
所以我們將 maker_id
宣告為 readonly
。如果你執行上面的,輸出將是:
5
因此,假設我們現在希望為我們的 maker_id
欄位新增另一個 setter。然後我們可以做如下事情:
public void set_maker_id(int maker_id) {
this.maker_id = maker_id;
}
但是,你現在會注意到它會引發錯誤:
所以你可以看到 readonly
屬性只允許我們將值分配給建構函式中的變數一次。否則,由於可訪問性,它往往會丟擲錯誤並拒絕修改。
完整程式碼如下所示:
class CAR {
private readonly int maker_id;
public CAR(int maker_id) {
this.maker_id = maker_id;
}
public void set_maker_id(int maker_id) {
this.maker_id = maker_id; // line ERROR
}
public int get_maker_id() {
return maker_id;
}
}
static void Main(String[] args) {
CAR x = new CAR(5);
Console.WriteLine(x.get_maker_id());
}
該錯誤已在程式碼中的註釋中提及。
使用 C#
中的簡單 get
屬性實現只讀屬性
我們可以將 maker_id
屬性編寫如下:
private int maker_id { get; }
如果你嘗試編寫如下函式:
public void set_val(int val) {
this.maker_id = val;
}
會產生如下錯誤:
所以你會看到設定 get
屬性是如何使它成為只讀的。完整程式碼如下:
class CAR {
private int maker_id { get; }
public CAR(int maker_id) {
this.maker_id = maker_id;
}
public void set_val(int val) {
this.maker_id = val;
}
}
static void Main(String[] args) {
CAR x = new CAR(5);
}
這不僅遵循約定規則,而且還傾向於破壞序列化程式。此外,它不會改變並且往往是不可變的。
如果你想確保 get
返回某些內容,請按如下方式編寫程式碼:
class CAR {
public int maker_id {
get { return maker_id; }
}
}
這就是你在 C# 中實現只讀的方式。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub