Określanie w pełni kwalifikowanych nazw typów

Należy określić nazwy typów, aby mieć prawidłowe dane wejściowe dla różnych operacji odbicia. W pełni kwalifikowana nazwa typu składa się ze specyfikacji nazwy zestawu, specyfikacji przestrzeni nazw i nazwy typu. Specyfikacje nazw typów są używane przez metody, takie jak Type.GetType, Module.GetType, ModuleBuilder.GetTypei Assembly.GetType.

Gramatyka dla nazw typów

Gramatyka definiuje składnię języków formalnych. W poniższej tabeli wymieniono reguły leksykalne opisujące sposób rozpoznawania prawidłowych danych wejściowych. Terminale (te elementy, które nie są jeszcze bardziej reducible) są wyświetlane we wszystkich wielkich literach. Nieterminalne (te elementy, które są dalej reducible) są wyświetlane w cudzysłowie mieszanym lub singly cytowane ciągi, ale pojedynczy cudzysłów (') nie jest częścią samej składni. Znak potoku (|) oznacza reguły, które mają podruchy.

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
	;

Określanie znaków specjalnych

W nazwie typu identyfikator to dowolna prawidłowa nazwa określona przez reguły języka.

Użyj ukośnika odwrotnego (\) jako znaku ucieczki, aby oddzielić następujące tokeny, gdy są używane w ramach identyfikatora.

Token Znaczenie
\, Separator zestawu.
\+ Separator typu zagnieżdżonego.
\& Typ odwołania.
\* Typ wskaźnika.
\[ Ogranicznik wymiarów tablicy.
\] Ogranicznik wymiarów tablicy.
\. Użyj ukośnika odwrotnego przed kropką tylko wtedy, gdy okres jest używany w specyfikacji tablicy. Kropki w przestrzeni nazwSpec nie przyjmują ukośnika odwrotnego.
\\ Ukośnik odwrotny w razie potrzeby jako literał ciągu.

Należy pamiętać, że we wszystkich składnikach TypeSpec z wyjątkiem AssemblyNameSpec spacje są istotne. W obiekcie AssemblyNameSpec spacje przed separatorem "", są istotne, ale spacje po separatorze "", są ignorowane.

Klasy odbicia, takie jak Type.FullName, zwracają nazwę mangled, aby zwracana nazwa mogła być używana w wywołaniu metody GetType, jak w MyType.GetType(myType.FullName)metodzie .

Na przykład w pełni kwalifikowana nazwa typu może być Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Jeśli przestrzeń nazw to Ozzy.Out+Back, znak plus musi być poprzedzony ukośnikiem odwrotnym. W przeciwnym razie analizator interpretuje go jako separator zagnieżdżania. Odbicie emituje ten ciąg jako Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

Określanie nazw zestawów

Minimalne informacje wymagane w specyfikacji nazwy zestawu to nazwa tekstowa (IDENTIFIER) zestawu. Identyfikator można śledzić według rozdzielanej przecinkami listy par właściwości/wartości, zgodnie z opisem w poniższej tabeli. Nazewnictwo identyfikatorów powinno być zgodne z regułami nazewnictwa plików. Identyfikator jest niewrażliwy na wielkość liter.

Nazwa właściwości Opis Dozwolone wartości
Wersja Numer wersji zestawu Major.Minor.Build.Revision, gdzie liczba główna, pomocnicza, kompilacja i poprawka to liczby całkowite z zakresu od 0 do 65535 włącznie.
Publickey Pełny klucz publiczny Wartość ciągu pełnego klucza publicznego w formacie szesnastkowym. Określ odwołanie o wartości null (nic w visual basic), aby jawnie wskazać zestaw prywatny.
Publickeytoken Token klucza publicznego (skrót 8 bajtów pełnego klucza publicznego) Wartość ciągu tokenu klucza publicznego w formacie szesnastkowym. Określ odwołanie o wartości null (nic w visual basic), aby jawnie wskazać zestaw prywatny.
Kultura Kultura zestawów Kultura zestawu w formacie RFC-1766 lub "neutralna" dla zestawów niezależnych od języka (niepodległych).
Niestandardowe Niestandardowy duży obiekt binarny (BLOB). Jest to obecnie używane tylko w zestawach generowanych przez generator obrazów natywnych (Ngen). Ciąg niestandardowy używany przez narzędzie Generator obrazów natywnych do powiadamiania pamięci podręcznej zestawów, że instalowany zestaw jest obrazem natywnym i dlatego należy go zainstalować w natywnej pamięci podręcznej obrazów. Nazwana również ciągiem zap.

W poniższym przykładzie przedstawiono element AssemblyName dla po prostu nazwanego zestawu z kulturą domyślną.

com.microsoft.crypto, Culture=""

W poniższym przykładzie przedstawiono w pełni określone odwołanie dla silnie nazwanego zestawu z kulturą "en".

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

W poniższych przykładach każdy z nich przedstawia częściowo określony element AssemblyName, który może być spełniony przez silny lub po prostu nazwany zestaw.

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

W poniższych przykładach każdy z nich przedstawia częściowo określony element AssemblyName, który musi być spełniony przez po prostu nazwany zestaw.

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

W poniższych przykładach każdy z nich przedstawia częściowo określony element AssemblyName, który musi być spełniony przez silnie nazwany zestaw.

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

Określanie typów ogólnych

SimpleTypeSpec'NUMBER reprezentuje otwarty typ ogólny z parametrami typu od 1 do n ogólnych. Aby na przykład uzyskać odwołanie do otwartego typu ogólnego List<T> lub zamkniętego typu ogólnego Ciąg> listy<, użyj polecenia Type.GetType("System.Collections.Generic.List`1") Aby uzyskać odwołanie do ogólnego typu Słownik<TKey,TValue>, użyj polecenia Type.GetType("System.Collections.Generic.Dictionary`2").

Określanie wskaźników

SimpleTypeSpec* reprezentuje wskaźnik niezarządzany. Aby na przykład uzyskać wskaźnik, aby wpisać MyType, użyj polecenia Type.GetType("MyType*"). Aby uzyskać wskaźnik do wskaźnika, aby wpisać MyType, użyj polecenia Type.GetType("MyType**").

Określanie odwołań

SimpleTypeSpec & reprezentuje zarządzany wskaźnik lub odwołanie. Aby na przykład uzyskać odwołanie do typu MyType, użyj polecenia Type.GetType("MyType &"). Należy pamiętać, że w przeciwieństwie do wskaźników odwołania są ograniczone do jednego poziomu.

Określanie tablic

W gramatyce BNF, ReflectionEmitDimension dotyczy tylko niekompletnych definicji typów pobranych przy użyciu polecenia ModuleBuilder.GetType. Niekompletne definicje typów są TypeBuilder obiektami skonstruowanymi przy użyciu, System.Reflection.Emit ale na których TypeBuilder.CreateType nie wywoływano. Element ReflectionDimension może służyć do pobierania dowolnej definicji typu, która została ukończona, czyli typu, który został załadowany.

Dostęp do tablic jest uzyskiwany w odbiciu przez określenie rangi tablicy:

  • Type.GetType("MyArray[]") pobiera tablicę jednowymiarową z 0 dolną granicą.

  • Type.GetType("MyArray[*]") pobiera tablicę jednowymiarową z nieznaną dolną granicą.

  • Type.GetType("MyArray[][]") pobiera tablicę dwuwymiarową.

  • Type.GetType("MyArray[*,*]") i Type.GetType("MyArray[,]") pobiera prostokątną dwuwymiarową tablicę z nieznanymi dolnymi granicami.

Należy pamiętać, że z punktu widzenia środowiska uruchomieniowego , MyArray[] != MyArray[*]ale w przypadku tablic wielowymiarowych dwa notacje są równoważne. Oznacza to, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") że daje wartość true.

W przypadku modułu ModuleBuilder.GetTypeMyArray[0..5] wskazuje tablicę jednowymiarową o rozmiarze 6, dolnej granicy 0. MyArray[4…] wskazuje tablicę o jednym wymiarze o nieznanym rozmiarze i dolnej granicy 4.

Zobacz też