許多 C# 初學者對「屬性」感到陌生,實際上它是 .NET 執行期中繼資料的核心機制。微軟官方文件(System.Attribute)有詳細說明,本文透過直觀範例快速建立概念。
方括號 [...] 中的語法本質上是呼叫屬性類別的建構函式。屬性類別繼承自 System.Attribute,因此它們在執行期就是普通物件,可透過反射取得實例並檢查其屬性值。這意味著屬性的行為不僅限於編譯期,更可在執行期動態決定邏輯。
Windows Forms 中,雙擊表單預設會導向 Load 事件,按鈕則導向 Click。這行為由 [DefaultEvent] 屬性控制。以下範例示範如何自訂預設事件:
[DefaultEvent("FormClosed")]
public partial class Form1 : Form { ... }
public partial class Form2 : Form1 { ... }
當在設計器中雙擊 Form2 時,Visual Studio 會直接產生 Form2_FormClosed 事件處理常式,而非預設的 Form2_Load。這證明屬性能影響開發工具與執行期框架的行為。
屬性可套用於:類別、結構、介面、委派、列舉、欄位、屬性、方法、建構函式、事件、參數、回傳值、組件、模組、型別參數等。透過 AttributeUsage 可精確限制適用範圍。
System.Attribute 的類別。[AttributeUsage] 限制目標與重複規則。[MyAttribute(...)]。MemberInfo.GetCustomAttributes() 讀取並驅動邏輯。理解屬性「本質是類別、執行期可反射」這一核心觀念,是邁向進階 .NET 開發的關鍵一步。