Type.GetType Metode

Definisi

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 assemblyResolverAssemblyName 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.

typeResolver
Func<Assembly,String,Boolean,Type>

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 throwOnErrornilai . Lihat bagian Pengecualian.

Pengecualian

typeNameadalah 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

typeNameadalah 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.
  1. 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.

  2. 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.

  3. 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

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 throwOnErrornilai . Lihat bagian Pengecualian.

Pengecualian

typeNameadalah 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 throwOnErrornilai . 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.
  1. 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.

  2. 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.

  3. 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 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 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

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 dalam 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 throwOnErrornilai . Lihat bagian Pengecualian.

Pengecualian

typeNameadalah 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 perakitan 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 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.

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, panggilan GetType untuk mengambil jenis dalam rakitan dinamis sementara mengembalikan null.

Untuk menggunakan GetType modul dinamis, berlangganan peristiwa 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 throwOnErrornilai . Misalnya, jika jenis ditemukan tetapi tidak dapat dimuat, TypeLoadException akan 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 (virtual dan 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.
  1. 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.

  2. 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.

  3. Atribut kustom bukan bagian dari sistem jenis umum.

Jenis array atau COM tidak dicari kecuali sudah dimuat ke dalam tabel kelas yang tersedia.

typeName dapat berupa nama jenis yang memenuhi syarat oleh 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 jenis. 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 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

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.

typeResolver
Func<Assembly,String,Boolean,Type>

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

typeNameadalah 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 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);
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 sebagai assemblyResolverAssemblyName 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.

typeResolver
Func<Assembly,String,Boolean,Type>

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; 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 throwOnErrornilai . Lihat bagian Pengecualian.

Pengecualian

typeNameadalah 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 perakitan 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 .

Berlaku untuk