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

Należy określić nazwy typów, aby mieć prawidłowe dane wejściowe do 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. Nieokreślone (te elementy, które są dalej reducible) są wyświetlane w ciągach mieszanych lub singly cytowanych, ale pojedynczy cudzysłów (') nie jest częścią samej składni. Znak potoku (|) określa 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 jest dowolną prawidłową nazwą określoną przez reguły języka.

Użyj ukośnika odwrotnego (\) jako znaku ucieczki, aby oddzielić następujące tokeny, gdy są używane jako część 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.

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.

Emocje klasy, takie jak Type.FullName, zwracają nazwę mangled, aby zwrócona nazwa mogła być używana w wywołaniu metody GetType, jak w MyType.GetType(myType.FullName).

Na przykład w pełni kwalifikowana nazwa typu może mieć wartość 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. Emocje ion 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. Możesz śledzić identyfikator 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 główna, pomocnicza, kompilacja i poprawka są liczbami całkowitymi z przedziału 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.
Kultury Kultura zestawów Kultura zestawu w formacie RFC-1766 lub "neutralna" dla zestawów niezależnych od języka (nietelliterowych).
Okres niestandardowy Niestandardowy obiekt binarny duży (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 ma być zainstalowany w natywnej pamięci podręcznej obrazów. Nazywana również ciągiem zap.

W poniższym przykładzie pokazano 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żda z nich pokazuje 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żda 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 pokazano 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 zakresu od 1 do n parametrów typu ogólnego. Aby na przykład uzyskać odwołanie do otwartego typu ogólnego lub zamkniętego typu List<T>List<String>ogólnego , użyj polecenia Type.GetType("System.Collections.Generic.List`1") Aby uzyskać odwołanie do typu Dictionary<TKey,TValue>ogólnego , 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 i reprezentuje zarządzany wskaźnik lub odwołanie. Aby na przykład uzyskać odwołanie do typu MyType, użyj polecenia Type.GetType("MyType &"). W przeciwieństwie do wskaźników odwołania są ograniczone do jednego poziomu.

Określanie tablic

W gramatyki BNF Emocje ionEmitDimension 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łano. Emocje ionDimension 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 dolną granicą.

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 ModuleBuilder.GetTypeparametru MyArray[0..5] wskazuje tablicę o pojedynczym wymiarze o rozmiarze 6, dolnej granicy 0. MyArray[4…] wskazuje tablicę jednowymiarową o nieznanym rozmiarze i dolnej granicy 4.

Zobacz też