Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda harus menentukan nama tipe untuk memiliki input yang valid untuk berbagai operasi refleksi. Nama tipe yang sepenuhnya memenuhi syarat terdiri dari spesifikasi nama rakitan, spesifikasi namespace, dan nama tipe. Spesifikasi nama jenis digunakan oleh metode seperti Type.GetType, , Module.GetTypeModuleBuilder.GetType, dan Assembly.GetType.
Tata bahasa untuk nama jenis
Tata bahasa mendefinisikan sintaks bahasa formal. Tabel berikut ini mencantumkan aturan leksikal yang menjelaskan cara mengenali input yang valid. Terminal-terminal (elemen-elemen yang tidak dapat diuraikan lebih lanjut) ditampilkan dalam semua huruf besar. Nonterminal (elemen yang lebih dapat direduksi) ditampilkan dalam string dengan huruf campuran atau string yang dikutip dengan tanda kutip tunggal, tetapi tanda kutip tunggal (') bukan bagian dari sintaks itu sendiri. Karakter pipa (|) menunjukkan aturan yang memiliki subaturan.
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
;
Tentukan karakter khusus
Dalam nama jenis, IDENTIFIER adalah nama valid yang ditentukan oleh aturan suatu bahasa.
Gunakan garis miring terbalik (\) sebagai karakter escape untuk memisahkan token berikut saat digunakan sebagai bagian dari IDENTIFIER.
Tanda | Makna |
---|---|
\, |
Pemisah rakitan. |
\+ |
Pemisah tipe bersarang. |
\& |
Jenis referensi. |
\* |
Jenis penunjuk. |
\[ |
Pemisah dimensi array. |
\] |
Pemisah dimensi array. |
\. |
Gunakan backslash sebelum titik hanya jika titik digunakan dalam spesifikasi array. Periode di NamespaceSpec tidak mengambil garis miring terbelakang. |
\\ |
Garis miring terbalik saat diperlukan sebagai string harfiah. |
Di semua komponen TypeSpec kecuali AssemblyNameSpec, spasi relevan. Di AssemblyNameSpec, spasi sebelum pemisah ',' relevan, tetapi spasi setelah pemisah ',' diabaikan.
Kelas refleksi, seperti Type.FullName, mengembalikan nama yang diacak sehingga nama yang dikembalikan dapat digunakan dalam pemanggilan ke GetType, seperti pada MyType.GetType(myType.FullName)
.
Misalnya, nama yang diberi kualifikasi penuh untuk tipe mungkinOzzy.OutBack.Kangaroo+Wallaby,MyAssembly
.
Jika namespace adalah Ozzy.Out+Back
, maka tanda plus harus didahului oleh tanda garis miring terbalik. Jika tidak, parser akan menafsirkannya sebagai pemisah bersarang. Pantulan memancarkan string ini sebagai Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly
.
Tentukan nama rakitan
Informasi minimum yang diperlukan dalam spesifikasi nama rakitan adalah nama tekstual (PENGIDENTIFIKASI) dari rakitan. Anda dapat mengikuti PENGIDENTIFIKASI dengan daftar pasangan properti/nilai yang dipisahkan koma seperti yang dijelaskan dalam tabel berikut. Penamaan pengidentifikasi harus mengikuti aturan untuk penamaan file. Pengidentifikasi tidak membedakan huruf besar-kecil.
Nama properti | Deskripsi | Nilai yang diizinkan |
---|---|---|
Versi | Nomor versi rakitan | Major.Minor.Build.Revisi, di mana Mayor, Minor, Build, dan Revisi adalah bilangan bulat antara 0 dan 65535 inklusif. |
PublicKey | Kunci publik penuh | Nilai string kunci publik penuh dalam format heksadesimal. Tentukan referensi null (Tidak ada di Visual Basic) untuk secara eksplisit menunjukkan rakitan privat. |
PublicKeyToken | Token kunci publik (hash 8 byte dari kunci publik lengkap) | Nilai string token kunci publik dalam format heksadesimal. Tentukan referensi null (Tidak ada di Visual Basic) untuk secara eksplisit menunjukkan rakitan privat. |
Budaya | Budaya kolaborasi | Budaya perakitan dalam format RFC-1766, atau "netral" untuk rakitan independen bahasa (nonsatellite). |
Khusus | Objek besar biner khusus (BLOB). Ini saat ini hanya digunakan dalam rakitan yang dihasilkan oleh Native Image Generator (Ngen). | String kustom yang digunakan oleh alat Native Image Generator untuk memberi tahu cache asembli bahwa asembli yang dipasang adalah citra asli, sehingga akan diinstal dalam cache citra asli. Juga disebut string zap. |
Contoh berikut menunjukkan AssemblyName untuk rakitan bernama sederhana dengan budaya default.
com.microsoft.crypto, Culture=""
Contoh berikut menunjukkan referensi yang sepenuhnya ditentukan untuk rakitan bernama kuat dengan budaya "en".
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
Contoh berikut masing-masing menunjukkan AssemblyName yang ditentukan sebagian, yang dapat dipenuhi oleh assembly yang bernama kuat atau bernama sederhana.
com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en
Contoh berikut masing-masing menunjukkan AssemblyName yang ditentukan sebagian, yang harus dipenuhi oleh assembly dengan nama sederhana.
com.microsoft.crypto, Culture="", PublicKeyToken=null
com.microsoft.crypto, Culture=en, PublicKeyToken=null
Contoh berikut masing-masing menunjukkan AssemblyName yang ditentukan sebagian, yang harus dipenuhi oleh assembly bernama kuat.
com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
Tentukan jenis generik
SimpleTypeSpec'NUMBER mewakili tipe generik terbuka dengan parameter tipe generik dari 1 hingga n. Misalnya, untuk mendapatkan referensi ke jenis generik terbuka List<T>
atau jenis generik tertutup List<String>
, gunakan Type.GetType("System.Collections.Generic.List`1")
. Untuk mendapatkan referensi ke jenis generik Dictionary<TKey,TValue>
, gunakan Type.GetType("System.Collections.Generic.Dictionary`2")
.
Tentukan penunjuk
SimpleTypeSpec* mewakili penunjuk yang tidak dikelola. Misalnya, untuk mendapatkan pointer untuk mengetik MyType, gunakan Type.GetType("MyType*")
. Untuk mendapatkan pointer ke pointer pada tipe MyType, gunakan Type.GetType("MyType**")
.
Tentukan referensi
SimpleTypeSpec & mewakili pointer atau referensi terkelola. Misalnya, untuk mendapatkan referensi untuk mengetik MyType, gunakan Type.GetType("MyType &")
. Tidak seperti pointer, referensi terbatas pada satu tingkat.
Spesifikasikan array
Dalam Tata Bahasa BNF, ReflectionEmitDimension hanya berlaku untuk definisi jenis yang tidak lengkap yang diambil menggunakan ModuleBuilder.GetType. Definisi jenis yang tidak lengkap adalah objek yang TypeBuilder dibangun menggunakan System.Reflection.Emit tetapi di mana TypeBuilder.CreateType belum dipanggil. ReflectionDimension dapat digunakan untuk mengambil definisi tipe apa pun yang telah selesai, yaitu tipe yang telah dimuat.
Array diakses dalam pantulan dengan menentukan peringkat array:
-
Type.GetType("MyArray[]")
mendapatkan array berdimensi tunggal dengan batas bawah 0. -
Type.GetType("MyArray[*]")
mendapatkan array dimensi tunggal dengan batas bawah yang belum diketahui. -
Type.GetType("MyArray[][]")
mendapatkan array dari array dua dimensi. -
Type.GetType("MyArray[*,*]")
danType.GetType("MyArray[,]")
mendapatkan array dua dimensi persegi panjang dengan batas bawah yang tidak diketahui.
Dari sudut pandang runtime, MyArray[] != MyArray[*]
, tetapi untuk array multidimensi, dua notasi tersebut setara. Artinya, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")
dievaluasi menjadi benar.
Untuk ModuleBuilder.GetType
, MyArray[0..5]
menunjukkan array dimensi tunggal dengan ukuran 6, batas bawah 0.
MyArray[4…]
menunjukkan array dimensi tunggal dengan ukuran yang tidak diketahui dan memiliki batas bawah 4.