Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Należy określić nazwy typów, aby mieć prawidłowe dane wejściowe do różnych operacji odbicia. Pełna kwalifikowana nazwa typu składa się ze specyfikacji nazwy zestawu, specyfikacji przestrzeni nazw oraz 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ą dalej podzielne) są wyświetlane we wszystkich wielkich literach. Nieterminale (te elementy, które są dalej redukowalne) są wyświetlane w ciągach mieszanej wielkości liter lub w pojedynczych cudzysłowach, ale pojedynczy cudzysłów (') nie jest częścią samej składni. Znak rury (|) określa reguły, które mają podreguły.
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.
Żeton | Znaczenie |
---|---|
\, |
Separator montażu. |
\+ |
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 NamespaceSpec nie używają 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.
Klasy odbicia, takie jak Type.FullName, zwracają zdeformowaną nazwę, aby można było ją używać w wywołaniu metody GetType, jak w przykładzie 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. Odbicie emituje ten ciąg jako Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly
.
Określ nazwy 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 Major, Minor, Build i Revision są liczbami całkowitymi z przedziału od 0 do 65535 włącznie. |
Klucz publiczny | 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 (8-bajtowy skrót 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 montażu | Kultura zbioru w formacie RFC-1766 lub "neutralna" dla zbiorów niezależnych od języka (niesatelitarnych). |
Niestandardowe Rozwiązanie | 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 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 List<T>
lub zamkniętego typu ogólnego List<String>
, użyj Type.GetType("System.Collections.Generic.List`1")
. Aby uzyskać odwołanie do typu ogólnego Dictionary<TKey,TValue>
, użyj 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 typu MyType, użyj Type.GetType("MyType**")
.
Wskaż odwołania
SimpleTypeSpec & oznacza 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 referencje są ograniczone do jednego poziomu.
Określanie tablic
W gramatyce BNF element ReflectionEmitDimension ma zastosowanie tylko do 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, na których nie wywołano TypeBuilder.CreateType. ReflectionDimension można użyć do pobierania dowolnej definicji typu, która została zdefiniowana, 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ą o zerowym dolnym ograniczeniu. -
Type.GetType("MyArray[*]")
pobiera tablicę jednowymiarową z nieznaną dolną granicą. -
Type.GetType("MyArray[][]")
pobiera tablicę zawierającą tablice dwuwymiarowe. -
Type.GetType("MyArray[*,*]")
iType.GetType("MyArray[,]")
pobierają prostokątną dwuwymiarową tablicę z nieznanymi dolnymi granicami.
Z punktu widzenia środowiska uruchomieniowego, MyArray[] != MyArray[*]
, ale w przypadku tablic wielowymiarowych obie notacje są równoważne. Oznacza to, że Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")
ma wartość true.
Dla ModuleBuilder.GetType
, MyArray[0..5]
wskazuje tablicę jednowymiarową o rozmiarze 6 i dolnej granicy 0.
MyArray[4…]
wskazuje tablicę jednowymiarową o nieznanym rozmiarze i dolnej granicy 4.