首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

深入淺出 Attribute(上)——初探 Attribute 的奧秘

     編輯:關於C語言

前言:生活中的啟發

週末逛超市時,我目睹了一場堪比動作大片的「搶收銀台」實況。一位打扮時尚的女生靈活穿梭貨架之間,購物車操控得行雲流水,甚至上演了「普加喬夫眼鏡蛇機動」般的急轉彎,最終衝向收銀台卻不幸「撞車」被紅牌罰下。這荒誕又生動的一幕,竟意外啟發了我對 C# Attribute 的理解——正如超市貨架上的商品貼著標籤(價格、產地、保存期限),程式碼中的類別、方法也能貼上「標籤」,這就是 Attribute 的核心概念。

什麼是 Attribute?

許多初學者對 Attribute 感到困惑,原因主要有二:一是平時較少直接使用;二是翻譯易混淆。早期譯者常將 Attribute 與 Property 同譯為「屬性」,造成極大困擾。現今共識已明確:Attribute 譯為「特性」,Property 才是「屬性」。

簡單來說,Attribute 就是一種「附著物」。如同牡蠣吸附在船底,它依附於程式碼元素(類別、方法、屬性等)之上,為其附加額外資訊(如作者、版本、過時標記等)。這些資訊會被編譯進組件的中繼資料,並在執行期透過反射讀取,以影響程式行為。

Attribute vs 註解:本質區別

  • 註解:給人看的說明,編譯時被丟棄,不影響執行。
  • Attribute:程式碼的一部分,編譯進中繼資料,執行期可讀取並決策邏輯。

實戰範例:ConditionalAttribute

假設一個工具類由小張、小李共同維護,部分方法曾有 Bug。若不使用 Attribute,只能在方法名或註解硬編碼資訊,維護極其痛苦。引入 ConditionalAttribute 後,一切變得優雅:

[Conditional("LI")]
[Conditional("BUGED")]
public static void Method1() { Console.WriteLine("Created By Li, Buged."); }

搭配 #define 宏,編譯器會根據條件決定是否保留方法呼叫。執行結果顯示,只有符合條件的方法真正執行,完美解決分類執行、統計工作量、回歸測試等需求。

Attribute 的語法細節

  • 附著方式:方括號 [] 包裹,緊貼目標之前。
  • 多重附著:同一目標可堆疊多個 Attribute,順序不影響結果。
  • 長/短記法:[ConditionalAttribute("LI")] 與 [Conditional("LI")] 等價。
  • 單括號疊加:[Conditional("NOBUG"), Conditional("LI")] 亦可。

下集預告

理解了 Attribute 的用途與語法,下一篇將深入探討 Attribute 的本質原理,並徹底釐清 Attribute 與 Property 的區別。敬請期待《深入淺出 Attribute(中)——Attribute 的本質》與《深入淺出 Attribute(下)——Attribute V.S. Property》。


法律聲明:本文受知識產權法保護,轉載請保持完整性,註明出處 BKJIA 及作者 劉鐵猛(博客連結),並發送郵件至 liutm@beyondsoft.com。原文出處:上善若水 潤物無聲。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved