共用方式為


指定完整類型名稱

您必須指定類型名稱,以提供對各種反射操作的有效輸入。 完整類型名稱是由元件名稱規格、命名空間規格和類型名稱所組成。 類型名稱規格是由、Type.GetTypeModule.GetTypeModuleBuilder.GetTypeAssembly.GetType等方法使用。

類型名稱的文法

文法會定義正式語言的語法。 下表列出描述如何辨識有效輸入的語彙規則。 那些無法進一步分解的終端元素會以全部大寫字母顯示。 非終結符號(可進一步被簡化的元素)用混合大小寫或單引號字串來表示,但單引號(')不是語法本身的一部分。 管線符號 (|) 表示具有子規則的規則。

TypeSpec
	: ReferenceTypeSpec
	| SimpleTypeSpec
	;

ReferenceTypeSpec
	: SimpleTypeSpec '&'
	;

SimpleTypeSpec
	: PointerTypeSpec
	| GenericTypeSpec
	| TypeName
	;

GenericTypeSpec
   : SimpleTypeSpec ` NUMBER

PointerTypeSpec
	: SimpleTypeSpec '*'
	;

ArrayTypeSpec
	: SimpleTypeSpec '[ReflectionDimension]'
	| SimpleTypeSpec '[ReflectionEmitDimension]'
	;

ReflectionDimension
	: '*'
	| ReflectionDimension ',' ReflectionDimension
	| NOTOKEN
	;

ReflectionEmitDimension
	: '*'
	| Number '..' Number
	| Number '…'
	| ReflectionDimension ',' ReflectionDimension
	| NOTOKEN
	;

Number
	: [0-9]+
	;

TypeName
	: NamespaceTypeName
	| NamespaceTypeName ',' AssemblyNameSpec
	;

NamespaceTypeName
	: NestedTypeName
	| NamespaceSpec '.' NestedTypeName
	;

NestedTypeName
	: IDENTIFIER
	| NestedTypeName '+' IDENTIFIER
	;

NamespaceSpec
	: IDENTIFIER
	| NamespaceSpec '.' IDENTIFIER
	;

AssemblyNameSpec
	: IDENTIFIER
	| IDENTIFIER ',' AssemblyProperties
	;

AssemblyProperties
	: AssemblyProperty
	| AssemblyProperties ',' AssemblyProperty
	;

AssemblyProperty
	: AssemblyPropertyName '=' AssemblyPropertyValue
	;

指定特殊字元

在類型名稱中,IDENTIFIER 是由語言規則所決定的任何有效名稱。

使用反斜杠(\)作為轉義字元,當用作IDENTIFIER的一部分時,用來分隔以下標記。

代幣 意義
\, 組件分隔器。
\+ 巢狀類型分隔符。
\& 參考型別。
\* 指標類型。
\[ 陣組維度分隔符。
\] 陣組維度分隔符。
\. 僅當句點用於陣列規格中時,才在句點前使用反斜杠。 NamespaceSpec 中的句點不會採用反斜杠。
\\ 在作為字串常值時需要使用反斜杠。

在 AssemblyNameSpec 以外的所有 TypeSpec 元件中,空格都相關。 在 AssemblyNameSpec 中,''分隔符前面的空格是相關的,但 ',' 分隔符後面的空格會被忽略。

反映類別,例如 Type.FullName,會傳回混淆名稱,讓傳回的名稱可以在呼叫 GetType 中使用,如同 MyType.GetType(myType.FullName) 中一樣。

例如,類型的完整名稱可能是 Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly

如果命名空間為 Ozzy.Out+Back,則加號前面必須加上反斜杠。 否則,解析器會將它解譯為巢狀分隔符號。 Reflection會將這個字串輸出為 Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly

指定元件名稱

元件名稱規格中所需的最小資訊是元件的文字名稱 (IDENTIFIER) 。 您可以依照下表所述,以逗號分隔的屬性/值組清單來追蹤IDENTIFIER。 標識元命名應遵循檔案命名的規則。 IDENTIFIER 不區分大小寫。

屬性名稱 說明 允許的值
版本 組件版本號碼 Major.Minor.Build.Revision,其中 MajorMinorBuildRevision 是介於 0 到 65535 之間的整數。
PublicKey 完整公鑰 十六進位格式的完整公鑰字串值。 指定 Null 參考 (Visual Basic 中的 Nothing ) 以明確指出私用元件。
PublicKeyToken 公鑰令牌 (完整公鑰的 8 位元組哈希) 以十六進位格式表示的公鑰令牌字串值。 指定 Null 參考 (Visual Basic 中的 Nothing ) 以明確指出私用元件。
文化 裝配文化 RFC-1766 格式的元件文化特性,或與語言無關的元件 (nonsatellite) 元件的「中性」文化特性。
自定義 自定義二進位大型物件 (BLOB)。 這目前只用於 原生映射產生器 (Ngen) 所產生的元件中。 自訂字串用於原生映像產生器工具,以通知元件快取所安裝的元件是原生映像,因此會安裝在原生映像快取中。 也稱為 zap 字串。

下列範例顯示一個具有預設文化設定的簡單命名組件的 AssemblyName

com.microsoft.crypto, Culture=""

下列範例顯示如何為強名稱元件指定完整的參考,該元件的文化特性為「en」。

com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
    Version=1.0.0.0

下列範例各顯示部分指定的 AssemblyName,可由強元件或單純命名的元件滿足。

com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en

下列範例各顯示部分指定的 AssemblyName,這必須由簡單的具名元件滿足。

com.microsoft.crypto, Culture="", PublicKeyToken=null
com.microsoft.crypto, Culture=en, PublicKeyToken=null

下列範例各顯示部分指定之AssemblyName,需要由具有強名稱的元件來滿足。

com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
    Version=1.0.0.0

指定泛型類型

SimpleTypeSpec'NUMBER 代表具有從 1 到 n 泛型類型參數的開放式泛型類型。 例如,若要取得開放泛型型別 List<T> 或封閉式泛型型別 List<String> 的參考,請使用 Type.GetType("System.Collections.Generic.List`1")。若要取得泛型型別 Dictionary<TKey,TValue> 的參考,請使用 Type.GetType("System.Collections.Generic.Dictionary`2")

指定指標

SimpleTypeSpec* 代表非受控指標。 例如,若要取得 MyType 類型的指標,請使用 Type.GetType("MyType*")。 若要取得類型 MyType 指標的指標, 請使用 Type.GetType("MyType**")

指定參考

SimpleTypeSpec& 代表托管指標或參考。 例如,若要取得 MyType 類型的參考,請使用 Type.GetType("MyType &")。 不同於指標,參考限製為一個層級。

指定陣列

在 BNF 文法中,ReflectionEmitDimension 僅適用於使用 ModuleBuilder.GetType擷取的不完整類型定義。 不完整的類型定義是使用 TypeBuilder 建構的物件,但尚未對其呼叫System.Reflection.Emit。 ReflectionDimension 可用來擷取任何已完成的類型定義,也就是已載入的類型。

陣列可藉由指定陣列的排名,在反映中存取陣列:

  • Type.GetType("MyArray[]") 取得具有 0 下限的單維度陣列。
  • Type.GetType("MyArray[*]") 會取得具有未知下限的單一維度陣列。
  • Type.GetType("MyArray[][]") 取得一個二維陣列的數組。
  • Type.GetType("MyArray[*,*]")Type.GetType("MyArray[,]") 會取得具有未知下限的矩形二維陣列。

從運行時間的觀點來看, MyArray[] != MyArray[*]但對於多維度陣列,這兩個表示法是相等的。 也就是說, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") 評估為 true

針對 ModuleBuilder.GetTypeMyArray[0..5] 表示大小為 6、下限 0 的單一維度陣列。 MyArray[4…] 表示未知大小和下限 4 的單維度陣列。

另請參閱