C# 屬性:初學者的全面指南
你好,未來的編程超級巨星!今天,我們將踏上一段令人興奮的旅程,探索 C# 屬性的世界。別擔心如果你之前從未寫過一行代碼——我將成為你的友好導遊,我們將一步步攻克這個主題。在這個教學的結束時,你將成為屬性方面的專家!
屬性是什麼?
在我們深入之前,讓我們想象你有一個存錢罐。你可以將錢放入其中,也可以取出錢,但你不能直接訪問存錢罐的內部。C# 的屬性與此類似——它們提供了一種方式來訪問和修改類中私有字段的值,同時仍然保持對訪問方式的控制。
為什麼使用屬性?
- 封裝:它們幫助隱藏類的內部工作方式。
- 靈活性:你可以更改數據的存儲方式,而不需要更改其訪問方式。
- 驗證:你可以在設置數據之前添加檢查,以確保數據有效。
現在,讓我們來動手寫一些代碼!
基本屬性語法
這裡是最簡單的屬性形式:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
在這個例子中,Name
是我們的屬性。它與私有字段 name
相關聯。get
和 set
部分被稱為訪問器。
訪問器
屬性有兩個主要的訪問器:
- get:检索屬性的值
- set:為屬性分配一個新值
讓我們分解我們的 Name
屬性:
public string Name
{
get { return name; } // 這是取得器
set { name = value; } // 這是設置器
}
當你訪問屬性(例如,person.Name
)時,會調用取得器。當你分配一個值(例如,person.Name = "John"
)時,會調用設置器。
自動實現的屬性
C# 為簡單的屬性提供了一種簡寫,這些屬性不需要任何特殊邏輯:
public class Person
{
public string Name { get; set; }
}
這會創建一個具有隱藏後備字段的屬性 Name
,由 C# 管理這個後備字段。這就像魔法一樣!
帶有邏輯的屬性
現在,讓我們為我們的屬性添加一些魅力:
public class BankAccount
{
private decimal balance;
public decimal Balance
{
get { return balance; }
set
{
if (value < 0)
{
throw new ArgumentException("餘額不能為負");
}
balance = value;
}
}
}
在這裡,我們確保餘額永遠不能為負。如果有人嘗試設置一個負的餘額,我們將抛出一個異常。這就像為你的存錢罐請了一個保鏢!
讀取器和寫入器屬性
有時候,你可能想要限制對你的屬性的訪問:
public class SecretAgent
{
private string codeName = "007";
// 讀取器屬性
public string CodeName
{
get { return codeName; }
}
// 寫入器屬性
public string Mission
{
set { Console.WriteLine($"新任務: {value}"); }
}
}
詹姆斯·邦德會對這種保密程度感到滿意!
表達式體屬性
對於簡單的屬性,C# 6.0 引入了一種更簡潔的語法:
public class Circle
{
public double Radius { get; set; }
// 使用表達式體的讀取器屬性
public double Area => Math.PI * Radius * Radius;
}
=>
語法就像是在說 "這個屬性由以下表達式定義"。它簡潔、甜蜜且具有數學性!
抽象屬性
在抽象類中,你可以定義抽象屬性,派生類必須實現它們:
public abstract class Shape
{
public abstract double Area { get; }
}
public class Square : Shape
{
public double Side { get; set; }
public override double Area => Side * Side;
}
這就像為屬性創建了一個藍圖,你的 "子" 類必須填寫。
屬性方法表
這裡是一個屬性相關方法的便捷表格:
方法 | 描述 | 示例 |
---|---|---|
get | 检索屬性值 | get { return name; } |
set | 設置屬性值 | set { name = value; } |
init | 只在對象初始化時設置屬性值 | public string Name { get; init; } |
value | 在設置器中表示被分配的值 | set { if (value != null) name = value; } |
結論
恭喜你!你剛剛踏入了 C# 屬性的世界。記住,屬性就像是你類中私有字段的訓練有素的管家——它們管理訪問、執行規則並保持整潔。
隨著你編程旅程的繼續,你會發現屬性到處都是。它們是編寫乾淨、可維護 C# 代碼的重要部分。繼續練習,很快你將會像專家一樣使用屬性!
快樂編程,願你的屬性永遠受到妥善保護!?????
Credits: Image by storyset