Type.GetType Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Type Mendapatkan objek yang mewakili jenis yang ditentukan.
Overload
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Mendapatkan jenis dengan nama yang ditentukan, menentukan apakah akan melakukan pencarian peka huruf besar/kecil dan apakah akan melemparkan pengecualian jika jenisnya tidak ditemukan, dan secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya. |
GetType() |
TypeMendapatkan . |
GetType(String) |
Type Mendapatkan dengan nama yang ditentukan, melakukan pencarian peka huruf besar/kecil. |
GetType(String, Boolean) |
Type Mendapatkan dengan nama yang ditentukan, melakukan pencarian peka huruf besar/kecil dan menentukan apakah akan melemparkan pengecualian jika jenis tidak ditemukan. |
GetType(String, Boolean, Boolean) |
Type Mendapatkan dengan nama yang ditentukan, menentukan apakah akan melemparkan pengecualian jika jenis tidak ditemukan dan apakah akan melakukan pencarian peka huruf besar/kecil. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Mendapatkan jenis dengan nama yang ditentukan, secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Mendapatkan jenis dengan nama yang ditentukan, menentukan apakah akan melemparkan pengecualian jika jenisnya tidak ditemukan, dan secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
Mendapatkan jenis dengan nama yang ditentukan, menentukan apakah akan melakukan pencarian peka huruf besar/kecil dan apakah akan melemparkan pengecualian jika jenisnya tidak ditemukan, dan secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Parameter
- typeName
- String
Nama jenis yang akan didapatkan.
typeResolver
Jika parameter disediakan, nama jenis dapat berupa string apa pun yang typeResolver
mampu menyelesaikannya.
assemblyResolver
Jika parameter disediakan atau jika resolusi jenis standar digunakan, typeName
harus berupa nama yang memenuhi syarat rakitan (lihat AssemblyQualifiedName), kecuali jenisnya berada dalam rakitan yang saat ini dijalankan atau dalam mscorlib.dll/System.Private.CoreLib.dll, dalam hal ini cukup untuk menyediakan nama jenis yang memenuhi syarat oleh namespace layanannya.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metode yang menemukan dan mengembalikan rakitan yang ditentukan dalam typeName
. Nama rakitan diteruskan sebagai assemblyResolver
AssemblyName objek. Jika typeName
tidak berisi nama assembly, assemblyResolver
tidak dipanggil. Jika assemblyResolver
tidak disediakan, resolusi rakitan standar dilakukan.
Perhatian: Jangan meneruskan metode dari penelepon yang tidak dikenal atau tidak tepercaya. Melakukannya dapat mengakibatkan peningkatan hak istimewa untuk kode berbahaya. Gunakan hanya metode yang Anda berikan atau yang Anda kenal.
Metode yang menemukan dan mengembalikan jenis yang ditentukan oleh typeName
dari assembly yang dikembalikan oleh assemblyResolver
atau dengan resolusi rakitan standar. Jika tidak ada assembly yang disediakan, metode dapat menyediakannya. Metode ini juga mengambil parameter yang menentukan apakah akan melakukan pencarian yang tidak peka huruf besar/kecil; nilai ignoreCase
diteruskan ke parameter tersebut.
Perhatian: Jangan meneruskan metode dari penelepon yang tidak dikenal atau tidak tepercaya.
- throwOnError
- Boolean
true
untuk melemparkan pengecualian jika jenis tidak dapat ditemukan; false
untuk mengembalikan null
. Menentukan false
juga menekan beberapa kondisi pengecualian lainnya, tetapi tidak semuanya. Lihat bagian Pengecualian.
- ignoreCase
- Boolean
true
untuk melakukan pencarian yang tidak peka huruf besar/kecil untuk typeName
, false
untuk melakukan pencarian peka huruf besar/kecil untuk typeName
.
Mengembalikan
Jenis dengan nama yang ditentukan. Jika jenis tidak ditemukan, throwOnError
parameter menentukan apakah null
dikembalikan atau pengecualian dilemparkan. Dalam beberapa kasus, pengecualian dilemparkan terlepas dari throwOnError
nilai . Lihat bagian Pengecualian.
Pengecualian
typeName
adalah null
.
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
throwOnError
adalah true
dan jenisnya tidak ditemukan.
-atau-
throwOnError
adalah true
dan typeName
berisi karakter yang tidak valid, seperti tab yang disematkan.
-atau-
throwOnError
adalah true
dan typeName
adalah string kosong.
-atau-
throwOnError
adalah true
dan typeName
mewakili jenis array dengan ukuran yang tidak valid.
-atau-
typeName
mewakili array dari TypedReference.
Kesalahan terjadi ketika typeName
diurai ke dalam nama jenis dan nama rakitan (misalnya, ketika nama jenis sederhana menyertakan karakter khusus yang tidak dilewati).
-atau-
throwOnError
adalah true
dan typeName
berisi sintaks yang tidak valid (misalnya, "MyType[,*,]").
-atau-
typeName
mewakili jenis generik yang memiliki jenis penunjuk, ByRef
jenis, atau Void sebagai salah satu argumen jenisnya.
-atau-
typeName
mewakili jenis generik yang memiliki jumlah argumen jenis yang salah.
-atau-
typeName
mewakili jenis generik, dan salah satu argumen jenisnya tidak memenuhi batasan untuk parameter jenis yang sesuai.
throwOnError
adalah true
dan perakitan atau salah satu dependensinya tidak ditemukan.
Rakitan atau salah satu dependensinya ditemukan, tetapi tidak dapat dimuat.
-atau-
typeName
berisi nama rakitan yang tidak valid.
-atau-
typeName
adalah nama rakitan yang valid tanpa nama jenis.
Rakitan atau salah satu dependensinya bukan rakitan yang valid untuk runtime yang saat ini dimuat.
Keterangan
Untuk informasi selengkapnya tentang API ini, lihat Keterangan API Tambahan untuk Type.GetType.
Berlaku untuk
GetType()
- Sumber:
- Type.cs
- Sumber:
- Type.cs
- Sumber:
- Type.cs
TypeMendapatkan .
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type
Mengembalikan
Type saat ini.
Penerapan
Pengecualian
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
Lihat juga
Berlaku untuk
GetType(String)
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
Type Mendapatkan dengan nama yang ditentukan, melakukan pencarian peka huruf besar/kecil.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Parameter
- typeName
- String
Nama jenis yang memenuhi syarat perakitan untuk didapatkan. Lihat AssemblyQualifiedName. Jika jenis berada dalam rakitan yang saat ini dijalankan atau dalam mscorlib.dll/System.Private.CoreLib.dll, cukup untuk menyediakan nama jenis yang memenuhi syarat oleh namespace layanannya.
Mengembalikan
Jenis dengan nama yang ditentukan, jika ditemukan; jika tidak, null
.
Pengecualian
typeName
adalah null
.
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
typeName
mewakili jenis generik yang memiliki jenis penunjuk, ByRef
jenis, atau Void sebagai salah satu argumen jenisnya.
-atau-
typeName
mewakili jenis generik yang memiliki jumlah argumen jenis yang salah.
-atau-
typeName
mewakili jenis generik, dan salah satu argumen jenisnya tidak memenuhi batasan untuk parameter jenis yang sesuai.
typeName
mewakili jenis yang tidak valid, misalnya, array dari TypedReference.
Rakitan atau salah satu dependensinya ditemukan, tetapi tidak dapat dimuat.
Catatan: Di .NET untuk aplikasi Bursa Windows atau Pustaka Kelas Portabel, tangkap pengecualian kelas dasar, IOException, sebagai gantinya.
Rakitan tidak valid untuk runtime yang saat ini dimuat.
Contoh
Contoh berikut mengambil jenis System.Int32
dan menggunakan objek jenis tersebut FullName untuk menampilkan properti .System.Int32
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Keterangan
Anda dapat menggunakan GetType metode untuk mendapatkan Type objek untuk jenis di rakitan lain jika Anda mengetahui nama assembly-qualified-nya, yang dapat diperoleh dari AssemblyQualifiedName.
GetType menyebabkan pemuatan rakitan yang ditentukan dalam typeName
. Anda juga dapat memuat perakitan menggunakan Assembly.Load metode , lalu menggunakan Assembly.GetType metode atau Assembly.GetTypes untuk mendapatkan Type objek. Jika jenis berada dalam rakitan yang diketahui oleh program Anda pada waktu kompilasi, lebih efisien untuk digunakan typeof
dalam C# atau GetType
operator di Visual Basic.
Catatan
Jika typeName
tidak dapat ditemukan, panggilan ke GetType(String) metode mengembalikan null
. Ini tidak melemparkan pengecualian. Untuk mengontrol apakah pengecualian dilemparkan, panggil kelebihan beban GetType metode yang memiliki throwOnError
parameter .
GetType hanya berfungsi pada rakitan yang dimuat dari disk. Jika Anda memanggil GetType untuk mencari jenis yang ditentukan dalam rakitan dinamis yang ditentukan menggunakan System.Reflection.Emit layanan, Anda mungkin mendapatkan perilaku yang tidak konsisten. Perilaku tergantung pada apakah rakitan dinamis persisten, yaitu, dibuat menggunakan RunAndSave
mode akses atau Save
enumerasi System.Reflection.Emit.AssemblyBuilderAccess . Jika rakitan dinamis persisten dan telah ditulis ke disk sebelumnya GetType
dipanggil, loader menemukan rakitan yang disimpan pada disk, memuat perakitan tersebut, dan mengambil jenis dari rakitan tersebut. Jika rakitan belum disimpan ke disk ketika GetType
dipanggil, metode akan mengembalikan null
.
GetType
tidak memahami rakitan dinamis sementara; oleh karena itu, memanggil GetType
untuk mengambil jenis dalam rakitan dinamis sementara mengembalikan null
.
Untuk menggunakan GetType
pada modul dinamis, berlangganan acara AppDomain.AssemblyResolve dan panggilan GetType
sebelum menyimpan. Jika tidak, Anda akan mendapatkan dua salinan perakitan dalam memori.
Tabel berikut menunjukkan anggota kelas dasar apa yang dikembalikan oleh Get
metode saat mencerminkan jenis.
Jenis anggota | Statis | Non-Statis |
---|---|---|
Konstruktor | Tidak | Tidak |
Bidang | Tidak | Ya. Bidang selalu disembunyikan menurut nama dan tanda tangan. |
Kejadian | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Metode | Tidak | Ya. Metode (baik virtual maupun non-virtual) dapat berupa hide-by-name atau hide-by-name-and-signature. |
Tipe Berlapis | Tidak | Tidak |
Properti | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Hide-by-name-and-signature mempertimbangkan semua bagian tanda tangan, termasuk pengubah kustom, jenis pengembalian, jenis parameter, sentinel, dan konvensi panggilan yang tidak dikelola. Ini adalah perbandingan biner.
Untuk refleksi, properti dan peristiwa adalah hide-by-name-and-signature. Jika Anda memiliki properti dengan aksesor get dan set di kelas dasar, tetapi kelas turunan hanya memiliki aksesor get, properti kelas turunan menyembunyikan properti kelas dasar, dan Anda tidak akan dapat mengakses setter pada kelas dasar.
Atribut kustom bukan bagian dari sistem jenis umum.
Array atau jenis COM tidak dicari kecuali telah dimuat ke dalam tabel kelas yang tersedia.
typeName
dapat menjadi nama jenis yang memenuhi syarat dengan namespace layanannya atau nama yang memenuhi syarat rakitan yang menyertakan spesifikasi nama rakitan. Lihat AssemblyQualifiedName.
Jika typeName
menyertakan namespace tetapi bukan nama rakitan, metode ini hanya mencari rakitan objek panggilan dan mscorlib.dll/System.Private.CoreLib.dll, dalam urutan tersebut. Jika typeName sepenuhnya memenuhi syarat dengan nama rakitan parsial atau lengkap, metode ini akan mencari di rakitan yang ditentukan. Jika assembly memiliki nama yang kuat, nama rakitan lengkap diperlukan.
Properti AssemblyQualifiedName mengembalikan nama jenis yang sepenuhnya memenuhi syarat termasuk jenis berlapis, nama rakitan, dan argumen jenis generik. Semua kompilator yang mendukung runtime bahasa umum akan memancarkan nama sederhana kelas berlapis, dan refleksi membuat nama yang terkelola ketika dikueri, sesuai dengan konvensi berikut.
Catatan
Arsitektur prosesor adalah bagian dari identitas perakitan, dan dapat ditentukan sebagai bagian dari string nama rakitan. Misalnya, "ProcessorArchitecture=msil". Namun, string tidak disertakan dalam string yang dikembalikan oleh AssemblyQualifiedName properti , karena alasan kompatibilitas. Anda juga dapat memuat jenis dengan membuat AssemblyName objek dan meneruskannya ke kelebihan beban Load metode yang sesuai. Anda kemudian dapat menggunakan Assembly.GetType metode untuk memuat jenis dari assembly. Lihat juga AssemblyName.ProcessorArchitecture.
Pembatas | Makna |
---|---|
Garis miring terbalik (\) | Karakter escape. |
Backtick (') | Mendahului satu atau beberapa digit yang mewakili jumlah parameter jenis, yang terletak di akhir nama jenis generik. |
Tanda kurung siku ([]) | Sertakan daftar argumen jenis generik, untuk jenis generik yang dibangun; dalam daftar argumen jenis, sertakan jenis yang memenuhi syarat rakitan. |
Koma (,) | Mendahului nama Assembly. |
Periode (.) | Menunjukkan pengidentifikasi namespace. |
Tanda plus (+) | Mendahului kelas berlapis. |
Misalnya, nama yang sepenuhnya memenuhi syarat untuk kelas mungkin terlihat seperti ini:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Jika namespace adalah TopNamespace.Sub+Namespace, maka string harus mendahului tanda plus (+) dengan karakter escape (\) untuk mencegahnya ditafsirkan sebagai pemisah bersarang. Pantulan memancarkan string ini sebagai berikut:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" menjadi "\+\+", dan "\" menjadi "\\".
Nama yang memenuhi syarat ini dapat dipertahankan dan kemudian digunakan untuk memuat Type. Untuk mencari dan memuat Type, gunakan GetType dengan nama jenis saja atau dengan nama jenis assembly yang memenuhi syarat. GetType dengan nama jenis hanya akan mencari Type di perakitan penelepon dan kemudian di rakitan Sistem. GetType dengan nama jenis assembly yang memenuhi syarat akan mencari Type di assembly apa pun.
Nama jenis dapat mencakup karakter berikutnya yang menunjukkan informasi tambahan tentang jenis, seperti apakah jenis tersebut adalah jenis referensi, jenis penunjuk, atau jenis array. Untuk mengambil nama jenis tanpa karakter berikutnya ini, gunakan t.GetElementType().ToString()
, di mana t
adalah jenisnya.
Spasi relevan di semua komponen nama jenis kecuali nama rakitan. Dalam nama rakitan, spasi sebelum pemisah ',' relevan, tetapi spasi setelah pemisah ',' diabaikan.
Nama jenis generik berakhir dengan backtick (') diikuti dengan digit yang mewakili jumlah argumen jenis generik. Tujuan dari nama ini adalah untuk memungkinkan pengkompilasi mendukung jenis generik dengan nama yang sama tetapi dengan jumlah parameter jenis yang berbeda, terjadi dalam cakupan yang sama. Misalnya, refleksi mengembalikan nama yang terkelola Tuple`1
dan Tuple`2
dari metode Tuple(Of T)
generik dan Tuple(Of T0, T1)
di Visual Basic, atau Tuple<T>
dan Tuple<T0, T1>
di Visual C#.
Untuk jenis generik, daftar argumen jenis diapit dalam tanda kurung siku, dan argumen jenis dipisahkan oleh koma. Misalnya, generik Dictionary<TKey,TValue> memiliki dua parameter jenis.
Dictionary<TKey,TValue> Dari MyType
dengan kunci jenis String mungkin direpresentasikan sebagai berikut:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Untuk menentukan jenis yang memenuhi syarat rakitan dalam daftar argumen jenis, sertakan jenis yang memenuhi syarat rakitan dalam tanda kurung. Jika tidak, koma yang memisahkan bagian dari nama yang memenuhi syarat rakitan ditafsirkan sebagai pembatas argumen jenis tambahan. Misalnya, Dictionary<TKey,TValue> dari MyType
fromMyAssembly.dll, dengan kunci jenis String, mungkin ditentukan sebagai berikut:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Catatan
Jenis yang memenuhi syarat rakitan hanya dapat diapit dalam tanda kurung siku saat muncul dalam daftar parameter jenis. Aturan untuk mencari rakitan untuk jenis yang memenuhi syarat dan tidak memenuhi syarat dalam daftar parameter jenis sama dengan aturan untuk jenis nongenerik yang memenuhi syarat dan tidak memenuhi syarat.
Jenis yang dapat diubah ke null adalah kasus khusus dari jenis generik. Misalnya, nullable Int32 diwakili oleh string "System.Nullable'1[System.Int32]".
Catatan
Di C#, C++, dan Visual Basic Anda juga bisa mendapatkan jenis yang dapat diubah ke null menggunakan operator jenis. Misalnya, jenis nullable Boolean dikembalikan oleh typeof(Nullable<bool>)
di C#, oleh Nullable<Boolean>::typeid
di C++, dan oleh GetType(Nullable(Of Boolean))
di Visual Basic.
Tabel berikut ini memperlihatkan sintaks yang Anda gunakan untuk GetType
berbagai jenis.
Untuk Mendapatkan | Penggunaan |
---|---|
Dapat diubah ke null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Penunjuk tidak terkelola ke MyType |
Type.GetType("MyType*") |
Penunjuk tidak terkelola ke penunjuk ke MyType |
Type.GetType("MyType**") |
Penunjuk terkelola atau referensi ke MyType |
Type.GetType("MyType&") . Perhatikan bahwa tidak seperti pointer, referensi terbatas pada satu tingkat. |
Kelas induk dan kelas berlapis | Type.GetType("MyParentClass+MyNestedClass") |
Array satu dimensi dengan batas bawah 0 | Type.GetType("MyType[]") |
Array satu dimensi dengan batas bawah yang tidak diketahui | Type.GetType("MyType[*]") |
Array n-dimensi | Koma (,) di dalam tanda kurung total n-1 kali. Misalnya, System.Object[,,] mewakili array tiga dimensi Object . |
Array array satu dimensi | Type.GetType("MyType[][]") |
Array dua dimensi persegi panjang dengan batas bawah yang tidak diketahui | Type.GetType("MyType[,]") |
Jenis generik dengan satu jenis argumen | Type.GetType("MyGenericType`1[MyType]") |
Jenis generik dengan dua jenis argumen | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Jenis generik dengan dua argumen jenis yang memenuhi syarat rakitan | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Jenis generik yang memenuhi syarat rakitan dengan argumen jenis yang memenuhi syarat rakitan | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Jenis generik yang argumen jenisnya adalah jenis generik dengan dua jenis argumen | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Lihat juga
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Menentukan Nama Jenis yang Sepenuhnya Memenuhi Syarat
Berlaku untuk
GetType(String, Boolean)
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
Type Mendapatkan dengan nama yang ditentukan, melakukan pencarian peka huruf besar/kecil dan menentukan apakah akan melemparkan pengecualian jika jenis tidak ditemukan.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parameter
- typeName
- String
Nama jenis yang memenuhi syarat perakitan untuk didapatkan. Lihat AssemblyQualifiedName. Jika jenis berada dalam rakitan yang saat ini dijalankan atau di mscorlib.dll/System.Private.CoreLib.dll, cukup untuk menyediakan nama jenis yang memenuhi syarat oleh namespace layanannya.
- throwOnError
- Boolean
true
untuk melemparkan pengecualian jika jenis tidak dapat ditemukan; false
untuk mengembalikan null
. Menentukan false
juga menekan beberapa kondisi pengecualian lainnya, tetapi tidak semuanya. Lihat bagian Pengecualian.
Mengembalikan
Jenis dengan nama yang ditentukan. Jika jenis tidak ditemukan, throwOnError
parameter menentukan apakah null
dikembalikan atau pengecualian dilemparkan. Dalam beberapa kasus, pengecualian dilemparkan terlepas dari throwOnError
nilai . Lihat bagian Pengecualian.
Pengecualian
typeName
adalah null
.
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
throwOnError
adalah true
dan jenisnya tidak ditemukan.
-atau-
throwOnError
adalah true
dan typeName
berisi karakter yang tidak valid, seperti tab yang disematkan.
-atau-
throwOnError
adalah true
dan typeName
adalah string kosong.
-atau-
throwOnError
adalah true
dan typeName
mewakili jenis array dengan ukuran yang tidak valid.
-atau-
typeName
mewakili array dari TypedReference.
throwOnError
adalah true
dan typeName
berisi sintaks yang tidak valid. Misalnya, "MyType[,*,]".
-atau-
typeName
mewakili jenis generik yang memiliki jenis penunjuk, ByRef
jenis, atau Void sebagai salah satu argumen jenisnya.
-atau-
typeName
mewakili jenis generik yang memiliki jumlah argumen jenis yang salah.
-atau-
typeName
mewakili jenis generik, dan salah satu argumen jenisnya tidak memenuhi batasan untuk parameter jenis yang sesuai.
throwOnError
adalah true
dan assembly atau salah satu dependensinya tidak ditemukan.
Rakitan atau salah satu dependensinya ditemukan, tetapi tidak dapat dimuat.
Catatan: Di .NET untuk aplikasi Bursa Windows atau Pustaka Kelas Portabel, tangkap pengecualian kelas dasar, IOException, sebagai gantinya.
Rakitan atau salah satu dependensinya tidak valid untuk runtime yang saat ini dimuat.
Contoh
Contoh berikut mengambil jenis System.Int32
dan menggunakan objek jenis tersebut FullName untuk menampilkan properti .System.Int32
Jika objek jenis mengacu pada rakitan yang tidak ada, contoh ini akan menampilkan pengecualian.
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Keterangan
Anda dapat menggunakan GetType metode untuk mendapatkan Type objek untuk jenis di rakitan lain jika Anda mengetahui nama yang memenuhi syarat rakitannya, yang dapat diperoleh dari AssemblyQualifiedName.
GetType menyebabkan pemuatan rakitan yang ditentukan dalam typeName
. Anda juga dapat memuat perakitan menggunakan Assembly.Load metode , lalu menggunakan Assembly.GetType metode atau Assembly.GetTypes untuk mendapatkan Type objek. Jika jenis berada dalam rakitan yang diketahui oleh program Anda pada waktu kompilasi, lebih efisien untuk digunakan typeof
di C# atau GetType
operator di Visual Basic.
GetType
hanya berfungsi pada rakitan yang dimuat dari disk. Jika Anda memanggil GetType
untuk mencari jenis yang ditentukan dalam rakitan dinamis yang ditentukan menggunakan System.Reflection.Emit layanan, Anda mungkin mendapatkan perilaku yang tidak konsisten. Perilaku tergantung pada apakah perakitan dinamis persisten, yaitu, dibuat menggunakan RunAndSave
mode System.Reflection.Emit.AssemblyBuilderAccess akses atau Save
enumerasi. Jika rakitan dinamis persisten dan telah ditulis ke disk sebelumnya GetType
dipanggil, loader menemukan rakitan yang disimpan pada disk, memuat perakitan tersebut, dan mengambil jenis dari rakitan tersebut. Jika assembly belum disimpan ke disk ketika GetType
dipanggil, metode mengembalikan null
.
GetType
tidak memahami rakitan dinamis sementara; oleh karena itu, memanggil GetType
untuk mengambil jenis dalam rakitan dinamis sementara mengembalikan null
.
Untuk menggunakan GetType
pada modul dinamis, berlangganan acara AppDomain.AssemblyResolve dan panggilan GetType
sebelum menyimpan. Jika tidak, Anda akan mendapatkan dua salinan perakitan dalam memori.
Parameter throwOnError
menentukan apa yang terjadi ketika jenis tidak ditemukan, dan juga menekan kondisi pengecualian tertentu lainnya, seperti yang dijelaskan di bagian Pengecualian. Beberapa pengecualian dilemparkan terlepas dari throwOnError
nilai . Misalnya, jika jenis ditemukan tetapi tidak dapat dimuat, TypeLoadException dilemparkan bahkan jika throwOnError
adalah false
.
Tabel berikut menunjukkan anggota kelas dasar apa yang dikembalikan oleh Get
metode saat mencerminkan jenis.
Jenis anggota | Statis | Non-Statis |
---|---|---|
Konstruktor | Tidak | Tidak |
Bidang | Tidak | Ya. Bidang selalu disembunyikan menurut nama dan tanda tangan. |
Kejadian | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Metode | Tidak | Ya. Metode (baik virtual maupun non-virtual) dapat berupa hide-by-name atau hide-by-name-and-signature. |
Tipe Berlapis | Tidak | Tidak |
Properti | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Hide-by-name-and-signature mempertimbangkan semua bagian tanda tangan, termasuk pengubah kustom, jenis pengembalian, jenis parameter, sentinel, dan konvensi panggilan yang tidak dikelola. Ini adalah perbandingan biner.
Untuk refleksi, properti dan peristiwa adalah hide-by-name-and-signature. Jika Anda memiliki properti dengan aksesor get dan set di kelas dasar, tetapi kelas turunan hanya memiliki aksesor get, properti kelas turunan menyembunyikan properti kelas dasar, dan Anda tidak akan dapat mengakses setter pada kelas dasar.
Atribut kustom bukan bagian dari sistem jenis umum.
Array atau jenis COM tidak dicari kecuali telah dimuat ke dalam tabel kelas yang tersedia.
typeName
dapat menjadi nama jenis yang memenuhi syarat dengan namespace layanannya atau nama yang memenuhi syarat rakitan yang menyertakan spesifikasi nama rakitan. Lihat AssemblyQualifiedName.
Jika typeName
menyertakan namespace tetapi bukan nama rakitan, metode ini hanya mencari rakitan objek panggilan dan mscorlib.dll/System.Private.CoreLib.dll, dalam urutan tersebut. Jika typeName sepenuhnya memenuhi syarat dengan nama rakitan parsial atau lengkap, metode ini mencari di rakitan yang ditentukan. Jika rakitan memiliki nama yang kuat, nama rakitan lengkap diperlukan.
Properti AssemblyQualifiedName mengembalikan nama jenis yang sepenuhnya memenuhi syarat termasuk jenis berlapis, nama rakitan, dan argumen generik. Semua kompilator yang mendukung runtime bahasa umum akan memancarkan nama sederhana kelas berlapis, dan refleksi membangun nama yang terkelola saat dikueri, sesuai dengan konvensi berikut.
Catatan
Arsitektur prosesor adalah bagian dari identitas rakitan, dan dapat ditentukan sebagai bagian dari string nama rakitan. Misalnya, "ProcessorArchitecture=msil". Namun, string tidak disertakan dalam string yang dikembalikan oleh AssemblyQualifiedName properti , karena alasan kompatibilitas. Anda juga dapat memuat jenis dengan membuat AssemblyName objek dan meneruskannya ke kelebihan beban metode yang Load sesuai. Anda kemudian dapat menggunakan Assembly.GetType metode untuk memuat jenis dari assembly. Lihat juga AssemblyName.ProcessorArchitecture.
Pembatas | Makna |
---|---|
Garis miring terbalik (\) | Karakter escape. |
Backtick (') | Mendahului satu atau beberapa digit yang mewakili jumlah parameter jenis, yang terletak di akhir nama jenis generik. |
Tanda kurung siku ([]) | Sertakan daftar argumen jenis generik, untuk jenis generik yang dibangun; dalam daftar argumen jenis, sertakan jenis yang memenuhi syarat rakitan. |
Koma (,) | Mendahului nama Assembly. |
Periode (.) | Menunjukkan pengidentifikasi namespace. |
Tanda plus (+) | Mendahului kelas berlapis. |
Misalnya, nama yang sepenuhnya memenuhi syarat untuk kelas mungkin terlihat seperti ini:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Jika namespace adalah TopNamespace.Sub+Namespace, maka string harus mendahului tanda plus (+) dengan karakter escape (\) untuk mencegahnya ditafsirkan sebagai pemisah berlapis. Pantulan memancarkan string ini sebagai berikut:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" menjadi "\+\+", dan "\" menjadi "\\".
Nama yang memenuhi syarat ini dapat dipertahankan dan kemudian digunakan untuk memuat Type. Untuk mencari dan memuat Type, gunakan GetType dengan nama jenis saja atau dengan nama jenis assembly yang memenuhi syarat. GetType dengan nama jenis hanya akan mencari Type di assembly penelepon dan kemudian di rakitan Sistem. GetType dengan nama jenis assembly yang memenuhi syarat akan mencari Type di assembly apa pun.
Nama jenis mungkin mencakup karakter berikutnya yang menunjukkan informasi tambahan tentang jenis, seperti apakah jenisnya adalah jenis referensi, jenis penunjuk, atau jenis array. Untuk mengambil nama jenis tanpa karakter berikutnya ini, gunakan t.GetElementType().ToString()
, di mana t
adalah jenisnya.
Spasi relevan di semua komponen nama jenis kecuali nama rakitan. Dalam nama rakitan, spasi sebelum pemisah ',' relevan, tetapi spasi setelah pemisah ',' diabaikan.
Nama jenis generik berakhir dengan backtick (') diikuti oleh digit yang mewakili jumlah argumen jenis generik. Tujuan dari mangling nama ini adalah untuk memungkinkan kompilator mendukung jenis generik dengan nama yang sama tetapi dengan jumlah parameter jenis yang berbeda, terjadi dalam cakupan yang sama. Misalnya, pantulan mengembalikan nama yang terkelola Tuple`1
dan Tuple`2
dari metode Tuple(Of T)
generik dan Tuple(Of T0, T1)
di Visual Basic, atau Tuple<T>
dan Tuple<T0, T1>
di Visual C#.
Untuk jenis generik, daftar argumen jenis diapit dalam tanda kurung siku, dan argumen jenis dipisahkan oleh koma. Misalnya, generik Dictionary<TKey,TValue> memiliki dua parameter jenis.
Dictionary<TKey,TValue> dari MyType
dengan kunci jenis String mungkin diwakili sebagai berikut:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Untuk menentukan jenis yang memenuhi syarat rakitan dalam daftar argumen jenis, sertakan jenis yang memenuhi syarat rakitan dalam tanda kurung siku. Jika tidak, koma yang memisahkan bagian dari nama yang memenuhi syarat rakitan ditafsirkan sebagai pembatas argumen jenis tambahan. Misalnya, Dictionary<TKey,TValue> dari MyType
MyAssembly.dll, dengan kunci jenis String, mungkin ditentukan sebagai berikut:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Catatan
Jenis yang memenuhi syarat rakitan hanya dapat diapit dalam tanda kurung siku saat muncul dalam daftar parameter jenis. Aturan untuk mencari rakitan untuk jenis yang memenuhi syarat dan tidak memenuhi syarat dalam daftar parameter jenis sama dengan aturan untuk jenis nongenerik yang memenuhi syarat dan tidak memenuhi syarat.
Jenis yang dapat diubah ke null adalah kasus khusus dari jenis generik. Misalnya, nullable Int32 diwakili oleh string "System.Nullable'1[System.Int32]".
Catatan
Di C#, C++, dan Visual Basic Anda juga bisa mendapatkan jenis yang dapat diubah ke null menggunakan operator jenis. Misalnya, jenis nullable Boolean dikembalikan oleh typeof(Nullable<bool>)
di C#, oleh Nullable<Boolean>::typeid
di C++, dan oleh GetType(Nullable(Of Boolean))
di Visual Basic.
Tabel berikut ini memperlihatkan sintaks yang Anda gunakan GetType
untuk berbagai jenis.
Untuk Mendapatkan | Penggunaan |
---|---|
Dapat diubah ke null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Penunjuk tidak terkelola ke MyType |
Type.GetType("MyType*") |
Penunjuk tidak terkelola ke penunjuk ke MyType |
Type.GetType("MyType**") |
Penunjuk terkelola atau referensi ke MyType |
Type.GetType("MyType&") . Perhatikan bahwa tidak seperti pointer, referensi terbatas pada satu tingkat. |
Kelas induk dan kelas berlapis | Type.GetType("MyParentClass+MyNestedClass") |
Array satu dimensi dengan batas bawah 0 | Type.GetType("MyArray[]") |
Array satu dimensi dengan batas bawah yang tidak diketahui | Type.GetType("MyArray[*]") |
Array n-dimensi | Koma (,) di dalam tanda kurung total n-1 kali. Misalnya, System.Object[,,] mewakili array tiga dimensi Object . |
Array dua dimensi | Type.GetType("MyArray[][]") |
Array dua dimensi persegi panjang dengan batas bawah yang tidak diketahui | Type.GetType("MyArray[,]") |
Jenis generik dengan satu jenis argumen | Type.GetType("MyGenericType`1[MyType]") |
Jenis generik dengan dua jenis argumen | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Jenis generik dengan dua argumen jenis yang memenuhi syarat rakitan | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Jenis generik yang memenuhi syarat rakitan dengan argumen jenis yang memenuhi syarat rakitan | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Jenis generik yang argumen jenisnya adalah jenis generik dengan dua jenis argumen | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Lihat juga
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Menentukan Nama Jenis yang Sepenuhnya Memenuhi Syarat
Berlaku untuk
GetType(String, Boolean, Boolean)
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
Type Mendapatkan dengan nama yang ditentukan, menentukan apakah akan melemparkan pengecualian jika jenis tidak ditemukan dan apakah akan melakukan pencarian peka huruf besar/kecil.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parameter
- typeName
- String
Nama jenis yang memenuhi syarat perakitan untuk didapatkan. Lihat AssemblyQualifiedName. Jika jenis berada dalam rakitan yang saat ini dijalankan atau di mscorlib.dll/System.Private.CoreLib.dll, cukup untuk menyediakan nama jenis yang memenuhi syarat oleh namespace layanannya.
- throwOnError
- Boolean
true
untuk melemparkan pengecualian jika jenis tidak dapat ditemukan; false
untuk mengembalikan null
. Menentukan false
juga menekan beberapa kondisi pengecualian lainnya, tetapi tidak semuanya. Lihat bagian Pengecualian.
- ignoreCase
- Boolean
true
untuk melakukan pencarian yang tidak peka huruf besar/kecil untuk typeName
, false
untuk melakukan pencarian peka huruf besar/kecil untuk typeName
.
Mengembalikan
Jenis dengan nama yang ditentukan. Jika jenis tidak ditemukan, throwOnError
parameter menentukan apakah null
dikembalikan atau pengecualian dilemparkan. Dalam beberapa kasus, pengecualian dilemparkan terlepas dari throwOnError
nilai . Lihat bagian Pengecualian.
Pengecualian
typeName
adalah null
.
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
throwOnError
adalah true
dan jenisnya tidak ditemukan.
-atau-
throwOnError
adalah true
dan typeName
berisi karakter yang tidak valid, seperti tab yang disematkan.
-atau-
throwOnError
adalah true
dan typeName
adalah string kosong.
-atau-
throwOnError
adalah true
dan typeName
mewakili jenis array dengan ukuran yang tidak valid.
-atau-
typeName
mewakili array dari TypedReference.
throwOnError
adalah true
dan typeName
berisi sintaks yang tidak valid. Misalnya, "MyType[,*,]".
-atau-
typeName
mewakili jenis generik yang memiliki jenis penunjuk, ByRef
jenis, atau Void sebagai salah satu argumen jenisnya.
-atau-
typeName
mewakili jenis generik yang memiliki jumlah argumen jenis yang salah.
-atau-
typeName
mewakili jenis generik, dan salah satu argumen jenisnya tidak memenuhi batasan untuk parameter jenis yang sesuai.
throwOnError
adalah true
dan assembly atau salah satu dependensinya tidak ditemukan.
Rakitan atau salah satu dependensinya ditemukan, tetapi tidak dapat dimuat.
Rakitan tidak valid untuk runtime yang saat ini dimuat.
Keterangan
Anda dapat menggunakan GetType metode untuk mendapatkan Type objek untuk jenis di rakitan lain jika Anda mengetahui nama yang memenuhi syarat rakitannya, yang dapat diperoleh dari AssemblyQualifiedName.
GetType menyebabkan pemuatan rakitan yang ditentukan dalam typeName
. Anda juga dapat memuat perakitan menggunakan Assembly.Load metode , lalu menggunakan Assembly.GetType metode atau Assembly.GetTypes untuk mendapatkan Type objek. Jika jenis berada dalam rakitan yang diketahui oleh program Anda pada waktu kompilasi, lebih efisien untuk digunakan typeof
di C# atau GetType
operator di Visual Basic.
GetType
hanya berfungsi pada rakitan yang dimuat dari disk. Jika Anda memanggil GetType
untuk mencari jenis yang ditentukan dalam rakitan dinamis yang ditentukan menggunakan System.Reflection.Emit layanan, Anda mungkin mendapatkan perilaku yang tidak konsisten. Perilaku tergantung pada apakah perakitan dinamis persisten, yaitu, dibuat menggunakan RunAndSave
mode System.Reflection.Emit.AssemblyBuilderAccess akses atau Save
enumerasi. Jika rakitan dinamis persisten dan telah ditulis ke disk sebelumnya GetType
dipanggil, loader menemukan rakitan yang disimpan pada disk, memuat perakitan tersebut, dan mengambil jenis dari rakitan tersebut. Jika assembly belum disimpan ke disk ketika GetType
dipanggil, metode mengembalikan null
.
GetType
tidak memahami rakitan dinamis sementara; oleh karena itu, memanggil GetType
untuk mengambil jenis dalam rakitan dinamis sementara mengembalikan null
.
Untuk menggunakan GetType
pada modul dinamis, berlangganan acara AppDomain.AssemblyResolve dan panggilan GetType
sebelum menyimpan. Jika tidak, Anda akan mendapatkan dua salinan perakitan dalam memori.
Parameter throwOnError
menentukan apa yang terjadi ketika jenis tidak ditemukan, dan juga menekan kondisi pengecualian tertentu lainnya, seperti yang dijelaskan di bagian Pengecualian. Beberapa pengecualian dilemparkan terlepas dari throwOnError
nilai . Misalnya, jika jenis ditemukan tetapi tidak dapat dimuat, TypeLoadException dilemparkan bahkan jika throwOnError
adalah false
.
Tabel berikut menunjukkan anggota kelas dasar apa yang dikembalikan oleh Get
metode saat mencerminkan jenis.
Jenis anggota | Statis | Non-Statis |
---|---|---|
Konstruktor | Tidak | Tidak |
Bidang | Tidak | Ya. Bidang selalu disembunyikan menurut nama dan tanda tangan. |
Kejadian | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Metode | Tidak | Ya. Metode (baik virtual maupun non-virtual) dapat berupa hide-by-name atau hide-by-name-and-signature. |
Tipe Berlapis | Tidak | Tidak |
Properti | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini. |
Hide-by-name-and-signature mempertimbangkan semua bagian tanda tangan, termasuk pengubah kustom, jenis pengembalian, jenis parameter, sentinel, dan konvensi panggilan yang tidak dikelola. Ini adalah perbandingan biner.
Untuk refleksi, properti dan peristiwa adalah hide-by-name-and-signature. Jika Anda memiliki properti dengan aksesor get dan set di kelas dasar, tetapi kelas turunan hanya memiliki aksesor get, properti kelas turunan menyembunyikan properti kelas dasar, dan Anda tidak akan dapat mengakses setter pada kelas dasar.
Atribut kustom bukan bagian dari sistem jenis umum.
Array atau jenis COM tidak dicari kecuali telah dimuat ke dalam tabel kelas yang tersedia.
typeName
dapat menjadi nama jenis yang memenuhi syarat dengan namespace layanannya atau nama yang memenuhi syarat rakitan yang menyertakan spesifikasi nama rakitan. Lihat AssemblyQualifiedName.
Jika typeName
menyertakan namespace tetapi bukan nama rakitan, metode ini hanya mencari rakitan objek panggilan dan mscorlib.dll/System.Private.CoreLib.dll, dalam urutan tersebut. Jika typeName sepenuhnya memenuhi syarat dengan nama rakitan parsial atau lengkap, metode ini akan mencari di rakitan yang ditentukan. Jika assembly memiliki nama yang kuat, nama rakitan lengkap diperlukan.
Properti AssemblyQualifiedName mengembalikan nama jenis yang sepenuhnya memenuhi syarat termasuk jenis berlapis, nama rakitan, dan argumen jenis. Semua kompilator yang mendukung runtime bahasa umum akan memancarkan nama sederhana kelas berlapis, dan refleksi membuat nama yang terkelola ketika dikueri, sesuai dengan konvensi berikut.
Catatan
Arsitektur prosesor adalah bagian dari identitas perakitan, dan dapat ditentukan sebagai bagian dari string nama rakitan. Misalnya, "ProcessorArchitecture=msil". Namun, string tidak disertakan dalam string yang dikembalikan oleh AssemblyQualifiedName properti , karena alasan kompatibilitas. Anda juga dapat memuat jenis dengan membuat AssemblyName objek dan meneruskannya ke kelebihan beban Load metode yang sesuai. Anda kemudian dapat menggunakan Assembly.GetType metode untuk memuat jenis dari assembly. Lihat juga AssemblyName.ProcessorArchitecture.
Pembatas | Makna |
---|---|
Garis miring terbalik (\) | Karakter escape. |
Backtick (') | Mendahului satu atau beberapa digit yang mewakili jumlah parameter jenis, yang terletak di akhir nama jenis generik. |
Tanda kurung siku ([]) | Sertakan daftar argumen jenis generik, untuk jenis generik yang dibangun; dalam daftar argumen jenis, sertakan jenis yang memenuhi syarat rakitan. |
Koma (,) | Mendahului nama Assembly. |
Periode (.) | Menunjukkan pengidentifikasi namespace. |
Tanda plus (+) | Mendahului kelas berlapis. |
Misalnya, nama yang sepenuhnya memenuhi syarat untuk kelas mungkin terlihat seperti ini:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Jika namespace adalah TopNamespace.Sub+Namespace, maka string harus mendahului tanda plus (+) dengan karakter escape (\) untuk mencegahnya ditafsirkan sebagai pemisah bersarang. Pantulan memancarkan string ini sebagai berikut:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" menjadi "\+\+", dan "\" menjadi "\\".
Nama yang memenuhi syarat ini dapat dipertahankan dan kemudian digunakan untuk memuat Type. Untuk mencari dan memuat Type, gunakan GetType dengan nama jenis saja atau dengan nama jenis assembly yang memenuhi syarat. GetType dengan nama jenis hanya akan mencari Type di perakitan penelepon dan kemudian di rakitan Sistem. GetType dengan nama jenis assembly yang memenuhi syarat akan mencari Type di assembly apa pun.
Nama jenis dapat mencakup karakter berikutnya yang menunjukkan informasi tambahan tentang jenis, seperti apakah jenis tersebut adalah jenis referensi, jenis penunjuk, atau jenis array. Untuk mengambil nama jenis tanpa karakter berikutnya ini, gunakan t.GetElementType().ToString()
, di mana t
adalah jenisnya.
Spasi relevan di semua komponen nama jenis kecuali nama rakitan. Dalam nama rakitan, spasi sebelum pemisah ',' relevan, tetapi spasi setelah pemisah ',' diabaikan.
Nama jenis generik berakhir dengan backtick (') diikuti dengan digit yang mewakili jumlah argumen jenis generik. Tujuan dari nama ini adalah untuk memungkinkan pengkompilasi mendukung jenis generik dengan nama yang sama tetapi dengan jumlah parameter jenis yang berbeda, terjadi dalam cakupan yang sama. Misalnya, refleksi mengembalikan nama yang terkelola Tuple`1
dan Tuple`2
dari metode Tuple(Of T)
generik dan Tuple(Of T0, T1)
di Visual Basic, atau Tuple<T>
dan Tuple<T0, T1>
di Visual C#.
Untuk jenis generik, daftar argumen jenis diapit dalam tanda kurung siku, dan argumen jenis dipisahkan oleh koma. Misalnya, generik Dictionary<TKey,TValue> memiliki dua parameter jenis.
Dictionary<TKey,TValue> Dari MyType
dengan kunci jenis String mungkin direpresentasikan sebagai berikut:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Untuk menentukan jenis yang memenuhi syarat rakitan dalam daftar argumen jenis, sertakan jenis yang memenuhi syarat rakitan dalam tanda kurung. Jika tidak, koma yang memisahkan bagian dari nama yang memenuhi syarat rakitan ditafsirkan sebagai pembatas argumen jenis tambahan. Misalnya, Dictionary<TKey,TValue> dari MyType
MyAssembly.dll, dengan kunci jenis String, mungkin ditentukan sebagai berikut:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Catatan
Jenis yang memenuhi syarat rakitan hanya dapat diapit dalam tanda kurung siku saat muncul dalam daftar parameter jenis. Aturan untuk mencari rakitan untuk jenis yang memenuhi syarat dan tidak memenuhi syarat dalam daftar parameter jenis sama dengan aturan untuk jenis nongenerik yang memenuhi syarat dan tidak memenuhi syarat.
Jenis yang dapat diubah ke null adalah kasus khusus dari jenis generik. Misalnya, nullable Int32 diwakili oleh string "System.Nullable'1[System.Int32]".
Catatan
Di C#, C++, dan Visual Basic Anda juga bisa mendapatkan jenis yang dapat diubah ke null menggunakan operator jenis. Misalnya, jenis nullable Boolean dikembalikan oleh typeof(Nullable<bool>)
di C#, oleh Nullable<Boolean>::typeid
di C++, dan oleh GetType(Nullable(Of Boolean))
di Visual Basic.
Tabel berikut ini memperlihatkan sintaks yang Anda gunakan untuk GetType
berbagai jenis.
Untuk Mendapatkan | Penggunaan |
---|---|
Dapat diubah ke null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Penunjuk tidak terkelola ke MyType |
Type.GetType("MyType*") |
Penunjuk tidak terkelola ke penunjuk ke MyType |
Type.GetType("MyType**") |
Penunjuk terkelola atau referensi ke MyType |
Type.GetType("MyType&") . Perhatikan bahwa tidak seperti pointer, referensi terbatas pada satu tingkat. |
Kelas induk dan kelas berlapis | Type.GetType("MyParentClass+MyNestedClass") |
Array satu dimensi dengan batas bawah 0 | Type.GetType("MyArray[]") |
Array satu dimensi dengan batas bawah yang tidak diketahui | Type.GetType("MyArray[*]") |
Array n-dimensi | Koma (,) di dalam tanda kurung total n-1 kali. Misalnya, System.Object[,,] mewakili array tiga dimensi Object . |
Array dua dimensi | Type.GetType("MyArray[][]") |
Array dua dimensi persegi panjang dengan batas bawah yang tidak diketahui | Type.GetType("MyArray[,]") |
Jenis generik dengan satu jenis argumen | Type.GetType("MyGenericType`1[MyType]") |
Jenis generik dengan dua jenis argumen | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Jenis generik dengan dua argumen jenis yang memenuhi syarat rakitan | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Jenis generik yang memenuhi syarat rakitan dengan argumen jenis yang memenuhi syarat rakitan | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Jenis generik yang argumen jenisnya adalah jenis generik dengan dua jenis argumen | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Lihat juga
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Menentukan Nama Jenis yang Sepenuhnya Memenuhi Syarat
Berlaku untuk
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
Mendapatkan jenis dengan nama yang ditentukan, secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Parameter
- typeName
- String
Nama jenis yang akan didapatkan.
typeResolver
Jika parameter disediakan, nama jenis dapat berupa string apa pun yang typeResolver
mampu menyelesaikannya.
assemblyResolver
Jika parameter disediakan atau jika resolusi jenis standar digunakan, typeName
harus berupa nama yang memenuhi syarat rakitan (lihat AssemblyQualifiedName), kecuali jenisnya berada dalam rakitan yang saat ini dijalankan atau dalam mscorlib.dll/System.Private.CoreLib.dll, dalam hal ini cukup untuk menyediakan nama jenis yang memenuhi syarat oleh namespace layanannya.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metode yang menemukan dan mengembalikan rakitan yang ditentukan dalam typeName
. Nama rakitan diteruskan ke assemblyResolver
sebagai AssemblyName objek. Jika typeName
tidak berisi nama assembly, assemblyResolver
tidak dipanggil. Jika assemblyResolver
tidak disediakan, resolusi perakitan standar dilakukan.
Perhatian: Jangan meneruskan metode dari penelepon yang tidak dikenal atau tidak tepercaya. Melakukannya dapat mengakibatkan peningkatan hak istimewa untuk kode berbahaya. Gunakan hanya metode yang Anda berikan atau yang Anda kenal.
Metode yang menemukan dan mengembalikan jenis yang ditentukan oleh typeName
dari assembly yang dikembalikan oleh assemblyResolver
atau dengan resolusi assembly standar. Jika tidak ada assembly yang disediakan, typeResolver
metode dapat menyediakannya. Metode ini juga mengambil parameter yang menentukan apakah akan melakukan pencarian yang tidak peka huruf besar/kecil; false
diteruskan ke parameter tersebut.
Perhatian: Jangan meneruskan metode dari penelepon yang tidak dikenal atau tidak tepercaya.
Mengembalikan
Jenis dengan nama yang ditentukan, atau null
jika jenisnya tidak ditemukan.
Pengecualian
typeName
adalah null
.
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
Kesalahan terjadi ketika typeName
diurai ke dalam nama jenis dan nama rakitan (misalnya, ketika nama jenis sederhana menyertakan karakter khusus yang tidak dilepas).
-atau-
typeName
mewakili jenis generik yang memiliki jenis penunjuk, ByRef
jenis, atau Void sebagai salah satu argumen jenisnya.
-atau-
typeName
mewakili jenis generik yang memiliki jumlah argumen jenis yang salah.
-atau-
typeName
mewakili jenis generik, dan salah satu argumen jenisnya tidak memenuhi batasan untuk parameter jenis yang sesuai.
typeName
mewakili jenis yang tidak valid, misalnya, array dari TypedReference.
Rakitan atau salah satu dependensinya ditemukan, tetapi tidak dapat dimuat.
-atau-
typeName
berisi nama rakitan yang tidak valid.
-atau-
typeName
adalah nama rakitan yang valid tanpa nama jenis.
Rakitan atau salah satu dependensinya tidak valid untuk runtime yang saat ini dimuat.
Keterangan
Skenario penggunaan untuk metode ini dan detail tentang assemblyResolver
parameter dan typeResolver
dapat ditemukan dalam GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metode kelebihan beban.
Catatan
Jika typeName
tidak dapat ditemukan, panggilan ke GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) metode mengembalikan null
. Ini tidak melemparkan pengecualian. Untuk mengontrol apakah pengecualian dilemparkan, panggil kelebihan beban GetType metode yang memiliki throwOnError
parameter .
Memanggil metode ini kelebihan beban sama dengan memanggil GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metode kelebihan beban dan menentukan false
untuk throwOnError
parameter dan ignoreCase
.
Berlaku untuk
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
- Sumber:
- Type.CoreCLR.cs
Mendapatkan jenis dengan nama yang ditentukan, menentukan apakah akan melempar pengecualian jika jenisnya tidak ditemukan, dan secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Parameter
- typeName
- String
Nama jenis yang akan didapatkan.
typeResolver
Jika parameter disediakan, nama jenis dapat berupa string apa pun yang typeResolver
mampu menyelesaikannya.
assemblyResolver
Jika parameter disediakan atau jika resolusi jenis standar digunakan, typeName
harus berupa nama yang memenuhi syarat rakitan (lihat AssemblyQualifiedName), kecuali jenisnya berada dalam rakitan yang saat ini dijalankan atau dalam mscorlib.dll/System.Private.CoreLib.dll, dalam hal ini cukup untuk menyediakan nama jenis yang memenuhi syarat oleh namespace layanannya.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metode yang menemukan dan mengembalikan rakitan yang ditentukan dalam typeName
. Nama rakitan diteruskan ke assemblyResolver
sebagai AssemblyName objek. Jika typeName
tidak berisi nama assembly, assemblyResolver
tidak dipanggil. Jika assemblyResolver
tidak disediakan, resolusi perakitan standar dilakukan.
Perhatian: Jangan meneruskan metode dari penelepon yang tidak dikenal atau tidak tepercaya. Melakukannya dapat mengakibatkan peningkatan hak istimewa untuk kode berbahaya. Gunakan hanya metode yang Anda berikan atau yang Anda kenal.
Metode yang menemukan dan mengembalikan jenis yang ditentukan oleh typeName
dari assembly yang dikembalikan oleh assemblyResolver
atau dengan resolusi assembly standar. Jika tidak ada assembly yang disediakan, metode dapat menyediakannya. Metode ini juga mengambil parameter yang menentukan apakah akan melakukan pencarian yang tidak peka huruf besar/kecil; false
diteruskan ke parameter tersebut.
Perhatian: Jangan meneruskan metode dari penelepon yang tidak dikenal atau tidak tepercaya.
- throwOnError
- Boolean
true
untuk melemparkan pengecualian jika jenis tidak dapat ditemukan; false
untuk mengembalikan null
. Menentukan false
juga menekan beberapa kondisi pengecualian lainnya, tetapi tidak semuanya. Lihat bagian Pengecualian.
Mengembalikan
Jenis dengan nama yang ditentukan. Jika jenis tidak ditemukan, throwOnError
parameter menentukan apakah null
dikembalikan atau pengecualian dilemparkan. Dalam beberapa kasus, pengecualian dilemparkan terlepas dari throwOnError
nilai . Lihat bagian Pengecualian.
Pengecualian
typeName
adalah null
.
Penginisialisasi kelas dipanggil dan melemparkan pengecualian.
throwOnError
adalah true
dan jenisnya tidak ditemukan.
-atau-
throwOnError
adalah true
dan typeName
berisi karakter yang tidak valid, seperti tab yang disematkan.
-atau-
throwOnError
adalah true
dan typeName
adalah string kosong.
-atau-
throwOnError
adalah true
dan typeName
mewakili jenis array dengan ukuran yang tidak valid.
-atau-
typeName
mewakili array dari TypedReference.
Kesalahan terjadi ketika typeName
diurai ke dalam nama jenis dan nama rakitan (misalnya, ketika nama jenis sederhana menyertakan karakter khusus yang tidak dilepas).
-atau-
throwOnError
adalah true
dan typeName
berisi sintaks yang tidak valid (misalnya, "MyType[,*,]").
-atau-
typeName
mewakili jenis generik yang memiliki jenis penunjuk, ByRef
jenis, atau Void sebagai salah satu argumen jenisnya.
-atau-
typeName
mewakili jenis generik yang memiliki jumlah argumen jenis yang salah.
-atau-
typeName
mewakili jenis generik, dan salah satu argumen jenisnya tidak memenuhi batasan untuk parameter jenis yang sesuai.
throwOnError
adalah true
dan assembly atau salah satu dependensinya tidak ditemukan.
-atau-
typeName
berisi nama rakitan yang tidak valid.
-atau-
typeName
adalah nama rakitan yang valid tanpa nama jenis.
Rakitan atau salah satu dependensinya ditemukan, tetapi tidak dapat dimuat.
Rakitan atau salah satu dependensinya tidak valid untuk runtime yang saat ini dimuat.
Keterangan
Skenario penggunaan untuk metode ini dan detail tentang assemblyResolver
parameter dan typeResolver
dapat ditemukan dalam GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metode kelebihan beban.
Memanggil metode ini kelebihan beban sama dengan memanggil GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metode kelebihan beban dan menentukan false
untuk ignoreCase
parameter .