Tam tür adlarını belirtme

Çeşitli yansıma işlemlerine geçerli giriş yapmak için tür adlarını belirtmeniz gerekir. Tam tür adı, derleme adı belirtimi, ad alanı belirtimi ve tür adından oluşur. Tür adı belirtimleri , , Module.GetTypeModuleBuilder.GetTypeve Assembly.GetTypegibi Type.GetTypeyöntemler tarafından kullanılır.

Tür adları için dil bilgisi

Dil bilgisi, resmi dillerin söz dizimini tanımlar. Aşağıdaki tabloda geçerli bir girişin nasıl tanındığını açıklayan sözcük kuralları listelanmaktadır. Terminaller (daha da azaltılabilir olmayan öğeler) tüm büyük harflerle gösterilir. Terim olmayanlar (daha da azaltılabilir öğeler) karışık veya tek tırnaklı dizelerde gösterilir, ancak tek tırnak (') söz diziminin bir parçası değildir. Kanal karakteri (|), alt kuralları olan kuralları belirtir.

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
	;

Özel karakterler belirtme

Tür adında TANıMLAYıCı, bir dilin kuralları tarafından belirlenen herhangi bir geçerli addır.

TANıMLAYıCı'nın bir parçası olarak kullanıldığında aşağıdaki belirteçleri ayırmak için kaçış karakteri olarak ters eğik çizgi (\) kullanın.

Belirteç Anlamı
\, Derleme ayırıcısı.
\+ İç içe tür ayırıcısı.
\& Başvuru türü.
\* İşaretçi türü.
\[ Dizi boyutu sınırlayıcısı.
\] Dizi boyutu sınırlayıcısı.
\. Noktanın dizi belirtiminde kullanılması durumunda nokta öncesinde ters eğik çizgi kullanın. NamespaceSpec içindeki noktalarda ters eğik çizgi alınmaz.
\\ Dize değişmez değeri olarak gerektiğinde ters eğik çizgi.

AssemblyNameSpec dışındaki tüm TypeSpec bileşenlerinde boşluklar geçerlidir. AssemblyNameSpec'te, ',' ayırıcıdan önceki boşluklar uygun olur, ancak ',' ayırıcıdan sonraki boşluklar yoksayılır.

gibi Type.FullNameDüşünceler ion sınıfları, döndürülen adın içinde olduğu gibi MyType.GetType(myType.FullName)çağrısında kullanılabilmesi için GetTypemangled adını döndürür.

Örneğin, bir türün tam adı olabilir Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Ad alanı ise Ozzy.Out+Backartı işaretinin önüne ters eğik çizgi gelmelidir. Aksi takdirde, ayrıştırıcı bunu iç içe ayırıcı olarak yorumlar. Düşünceler ion bu dizeyi olarak Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssemblyyayar.

Derleme adlarını belirtme

Derleme adı belirtiminde gereken en düşük bilgi, derlemenin metin adıdır (IDENTIFIER). TANıMLAYıCı'yı, aşağıdaki tabloda açıklandığı gibi, özellik/değer çiftlerinin virgülle ayrılmış bir listesiyle izleyebilirsiniz. TANıMLAYıCı adlandırma, dosya adlandırma kurallarına uymalıdır. TANıMLAYıCı büyük/küçük harfe duyarlı değildir.

Özellik adı Açıklama İzin verilebilen değerler
Sürüm Derleme sürüm numarası Major.Minor.Build.Revision; burada Major, Minor, Build ve Revision , 0 ile 65535 (dahil) arasındaki tamsayılardır.
Publickey Tam ortak anahtar Tam ortak anahtarın onaltılık biçimdeki dize değeri. Özel bir derlemeyi açıkça belirtmek için null başvuru (Visual Basic'te hiçbir şey ) belirtin.
Publickeytoken Ortak anahtar belirteci (tam ortak anahtarın 8 bayt karması) Ortak anahtar belirtecinin onaltılık biçimdeki dize değeri. Özel bir derlemeyi açıkça belirtmek için null başvuru (Visual Basic'te hiçbir şey ) belirtin.
Kültür Derleme kültürü Rfc-1766 biçiminde derleme kültürü veya dilden bağımsız (bağımsız) derlemeler için "nötr".
Özel Özel ikili büyük nesne (BLOB). Bu, şu anda yalnızca Yerel Görüntü Oluşturucu (Ngen) tarafından oluşturulan derlemelerde kullanılır. Yerel Görüntü Oluşturucu aracı tarafından, yüklenen derlemenin yerel bir görüntü olduğunu ve bu nedenle yerel görüntü önbelleğine yükleneceğini derleme önbelleğine bildirmek için kullanılan özel dize. Zap dizesi olarak da adlandırılır.

Aşağıdaki örnekte, varsayılan kültüre sahip basit adlandırılmış bir derleme için AssemblyName gösterilmektedir.

com.microsoft.crypto, Culture=""

Aşağıdaki örnekte, "en" kültürüne sahip kesin olarak adlandırılmış bir derleme için tam olarak belirtilen bir başvuru gösterilmektedir.

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

Aşağıdaki örneklerin her biri kısmen belirtilen bir AssemblyName gösterir ve bu, güçlü veya basit adlandırılmış bir derleme tarafından karşılanabilir.

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

Aşağıdaki örneklerin her biri, yalnızca adlandırılmış bir derleme tarafından karşılanması gereken kısmen belirtilmiş bir AssemblyName gösterir.

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

Aşağıdaki örneklerin her biri, kesin olarak adlandırılmış bir derleme tarafından karşılanması gereken kısmen belirtilmiş bir AssemblyName gösterir.

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

Genel türleri belirtme

SimpleTypeSpec'NUMBER, 1 ile n genel tür parametreleri arasında açık bir genel türü temsil eder. Örneğin, açık genel türe veya kapalı genel türe List<T>List<String>başvuru almak için, Type.GetType("System.Collections.Generic.List`1") genel türe Dictionary<TKey,TValue>başvuru almak için kullanın Type.GetType("System.Collections.Generic.Dictionary`2").

İşaretçileri belirtme

SimpleTypeSpec* yönetilmeyen bir işaretçiyi temsil eder. Örneğin, MyType yazacak bir işaretçi almak için kullanın Type.GetType("MyType*"). MyType yazacak bir işaretçiyi almak için kullanın Type.GetType("MyType**").

Başvuruları belirtme

SimpleTypeSpec & yönetilen bir işaretçiyi veya başvuruyı temsil eder. Örneğin, MyType türüne bir başvuru almak için kullanın Type.GetType("MyType &"). İşaretçilerin aksine, başvurular bir düzeyle sınırlıdır.

Dizileri belirtme

BNF Dil Bilgisi'nde, Düşünceler ionEmitDimension yalnızca kullanılarak ModuleBuilder.GetTypealınan tamamlanmamış tür tanımlarına uygulanır. Tamamlanmamış tür tanımları kullanılarak System.Reflection.Emit ama üzerinde TypeBuilder.CreateType çağrılmamış nesnelerdirTypeBuilder. Düşünceler ionDimension, tamamlanmış herhangi bir tür tanımını, yani yüklenmiş bir türü almak için kullanılabilir.

Dizilere, dizinin derecesini belirterek yansıma olarak erişilir:

  • Type.GetType("MyArray[]") 0 alt sınıra sahip tek boyutlu bir dizi alır.
  • Type.GetType("MyArray[*]") bilinmeyen alt sınıra sahip tek boyutlu bir dizi alır.
  • Type.GetType("MyArray[][]") iki boyutlu bir dizinin dizisini alır.
  • Type.GetType("MyArray[*,*]") ve Type.GetType("MyArray[,]") bilinmeyen alt sınırları olan dikdörtgen iki boyutlu bir dizi alır.

Çalışma zamanı açısından , MyArray[] != MyArray[*]ancak çok boyutlu diziler için iki gösterimi eşdeğerdir. Yani, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") true olarak değerlendirilir.

için ModuleBuilder.GetType, MyArray[0..5] boyut 6, alt sınır 0 olan tek boyutlu bir diziyi gösterir. MyArray[4…] bilinmeyen boyutta ve alt sınır 4'ün tek boyutlu bir dizisini gösterir.

Ayrıca bkz.