c# 程式中的型別、成員和其他實體都支援修飾符,這些修飾符控制它們的行為的某些方面。
例如,方法的可訪問性是使用 public、protected、internal 和 private 修飾符來控制的。
c# 使此功能一般化,以便能夠將使用者定義型別的宣告資訊附加到程式實體,並在執行時檢索。這種附加的宣告資訊是程式通過定義和使用特性 (attribute) 來指定的。
下面的示例宣告乙個 helpattribute 特性,該特性可放置在程式實體上,以便提供指向其關聯文件的鏈結。
usingsystem;
public
class
helpattribute: attribute
public
string
url
}public
string
topic
set
}}
所有特性類都從 .net framework 提供的 system.attribute 基類派生而來。可以通過在相關宣告之前緊鄰的方括號內提供特性名和任何實參來應用特性。如果特性的名稱以 attribute 結尾,在引用該特性時可以省略此名稱字尾。例如,helpattribute 特性可以按如下方式使用。
[help("")]public
class
widget
}
此示例將乙個 helpattribute 附加到 widget 類,並且將另乙個 helpattribute 附加到該類中的 display 方法。特性類的公共建構函式控制在將特性附加到程式實體時,必須提供的資訊。可以通過引用特性類的公共讀寫屬性提供附加資訊,例如前面對 topic 屬性的引用。
下面的示例演示如何使用反射在執行時檢索給定程式實體的特性資訊。
usingsystem;
using
system.reflection;
class
test
", member);
}else:"
, member);
console.writeline(
"url=, topic=
", a.url, a.topic);}}
static
void
main()
}
當通過反射請求特定特性時,將使用程式源中提供的資訊呼叫特性類的建構函式,並返回生成的特性例項。如果通過屬性提供了附加資訊,那些屬性將在返回特性例項之前被設定為給定的值。
C 語言規範版本5 0學習 4 型別
c 語言的型別劃分為兩大類 值型別 value type 和引用型別 reference type 值型別和引用型別都可以為泛型型別 generic type 泛型型別採用乙個或多個型別引數。型別引數可以指定值型別和引用型別。type value type reference type type p...
C 語言規範版本5 0學習 3 1成員
命名空間和型別具有成員 member 通常可以通過限定名來訪問實體的成員。限定名以對實體的引用開頭,後跟乙個 標記,再接成員的名稱。型別的成員或者是在該型別宣告中宣告的,或者是從該型別的基類繼承 inherit 的。當型別從基類繼承時,基類的所有成員 例項建構函式 析構函式和靜態建構函式除外 都成為...
C 語言規範 版本5 0 第14章 列舉
列舉型別 enum type 是一種獨特的值型別 第 4.1 節 它用於宣告一組命名的常量。下面的示例 enum color 宣告乙個名為 color 的列舉型別,該型別具有三個成員 red green 和 blue。列舉宣告用於宣告新的列舉型別。列舉宣告以關鍵字 enum 開始,然後定義該列舉的名...