Bagikan melalui


Type.GetType Metode

Definisi

Type Mendapatkan objek yang mewakili jenis yang ditentukan.

Overload

Nama Deskripsi
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 jenis tidak ditemukan, dan secara opsional menyediakan metode kustom untuk menyelesaikan perakitan dan jenisnya.

GetType()

Mendapatkan .Type

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 jenis 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
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 jenis 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
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 merupakan nama yang memenuhi syarat rakitan (lihat AssemblyQualifiedName), kecuali jenisnya berada dalam rakitan yang sedang 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 rakitan, 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 rakitan yang dikembalikan oleh assemblyResolver atau dengan resolusi rakitan standar. Jika tidak ada rakitan yang disediakan, metode dapat menyediakannya. Metode ini juga mengambil parameter yang menentukan apakah akan melakukan pencarian yang tidak peka huruf besar/kecil; nilai diteruskan ignoreCase 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.

Atribut

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 merupakan 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 assembly 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

Pada .NET Core 3.0 dan versi yang lebih baru, jika assemblyResolver null, maka beban rakitan yang dipicu oleh API ini dipengaruhi oleh nilai saat ini dari AssemblyLoadContext.CurrentContextualReflectionContext.

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
Sumber:
Type.cs
Sumber:
Type.cs

Mendapatkan .Type

public:
 Type ^ GetType();
public:
 virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type

Mengembalikan

Type.

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
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

Parameter

typeName
String

Nama jenis yang memenuhi syarat rakitan untuk didapatkan. Lihat AssemblyQualifiedName. Jika jenis berada dalam rakitan yang sedang 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.

Atribut

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

Nota

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.

.NET Framework saja: 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 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 rakitan tersebut, dan mengambil jenis dari rakitan tersebut. Jika rakitan 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.

Di .NET Framework, untuk digunakan GetType pada modul dinamis, berlangganan peristiwa AppDomain.AssemblyResolve dan panggilan GetType sebelum menyimpan. Jika tidak, Anda akan mendapatkan dua salinan perakitan dalam memori.

Pada .NET Core 3.0 dan versi yang lebih baru, beban rakitan yang dipicu oleh API ini dipengaruhi oleh nilai saat ini dari AssemblyLoadContext.CurrentContextualReflectionContext.

Tabel berikut menunjukkan anggota-anggota kelas dasar yang dikembalikan oleh metode-metode Get ketika mencerminkan tipe.

Tipe Anggota Static Tidak Statis
Constructor No No
Ladang No Ya. Bidang selalu disembunyikan berdasarkan nama dan tanda tangan.
Event 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 No Ya. Metode (baik virtual maupun non-virtual) dapat disembunyikan berdasarkan nama atau berdasarkan nama dan tanda tangan.
Tipe Berlapis No No
Harta benda 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 komponen tanda tangan, termasuk modifikasi khusus, tipe pengembalian, tipe parameter, sentinel, dan konvensi pemanggilan yang tidak dikelola. Ini adalah perbandingan biner.

  2. Untuk refleksi, sifat dan kejadian disembunyikan berdasarkan nama dan tanda tangan. 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 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 akan 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 generik. Semua kompilator yang mendukung runtime bahasa umum akan memancarkan nama sederhana kelas berlapis, dan refleksi membangun nama mangled ketika dikueri, sesuai dengan konvensi berikut.

Nota

Arsitektur prosesor adalah bagian dari identitas rakitan, dan dapat ditentukan sebagai bagian dari string nama perakitan. 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 perakitan. Lihat juga AssemblyName.ProcessorArchitecture.

Pemisah Meaning
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.
Titik (.) 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 layanan 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 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 diakhir dengan backtick (') diikuti dengan digit yang mewakili jumlah argumen jenis generik. Tujuan dari mangling 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, pantulan mengembalikan nama Tuple`1 yang di-mangled 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. Dari Dictionary<TKey,TValue>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. 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]]")

Nota

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 nullable adalah kasus khusus jenis generik. Misalnya, nullable Int32 diwakili oleh string "System.Nullable'1[System.Int32]".

Nota

Anda juga bisa mendapatkan jenis nullable menggunakan operator jenis. Misalnya, jenis nullable Boolean dikembalikan oleh typeof(Nullable<bool>) 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 Menggunakan
Dapat diubah ke null Int32 Type.GetType("System.Nullable`1[System.Int32]")
Penunjuk tidak terkelola ke MyType Type.GetType("MyType*")
Penunjuk yang tidak dikelola ke penunjuk ke MyType Type.GetType("MyType**")
Penunjuk terkelola atau referensi ke MyType Type.GetType("MyType&"). Perhatikan bahwa tidak seperti penunjuk, 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
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
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 rakitan untuk didapatkan. Lihat AssemblyQualifiedName. Jika jenis berada dalam rakitan yang sedang 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.

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.

Atribut

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 merupakan 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 sintaksis 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 melemparkan pengecualian.

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

.NET Framework saja: 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 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 rakitan tersebut, dan mengambil jenis dari rakitan tersebut. Jika rakitan 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.

Di .NET Framework, untuk digunakan GetType pada modul dinamis, berlangganan peristiwa AppDomain.AssemblyResolve dan panggilan GetType sebelum menyimpan. Jika tidak, Anda akan mendapatkan dua salinan perakitan dalam memori.

Pada .NET Core 3.0 dan versi yang lebih baru, beban rakitan yang dipicu oleh API ini dipengaruhi oleh nilai saat ini dari AssemblyLoadContext.CurrentContextualReflectionContext.

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, akan TypeLoadException dilemparkan bahkan jika throwOnError adalah false.

Tabel berikut menunjukkan anggota-anggota kelas dasar yang dikembalikan oleh metode-metode Get ketika mencerminkan tipe.

Tipe Anggota Static Tidak Statis
Constructor No No
Ladang No Ya. Bidang selalu disembunyikan berdasarkan nama dan tanda tangan.
Event 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 No Ya. Metode (baik virtual maupun non-virtual) dapat disembunyikan berdasarkan nama atau berdasarkan nama dan tanda tangan.
Tipe Berlapis No No
Harta benda 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 komponen tanda tangan, termasuk modifikasi khusus, tipe pengembalian, tipe parameter, sentinel, dan konvensi pemanggilan yang tidak dikelola. Ini adalah perbandingan biner.

  2. Untuk refleksi, sifat dan kejadian disembunyikan berdasarkan nama dan tanda tangan. 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 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 akan 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 mangled ketika dikueri, sesuai dengan konvensi berikut.

Nota

Arsitektur prosesor adalah bagian dari identitas rakitan, dan dapat ditentukan sebagai bagian dari string nama perakitan. 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 perakitan. Lihat juga AssemblyName.ProcessorArchitecture.

Pemisah Meaning
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.
Titik (.) 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 layanan 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 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 diakhir dengan backtick (') diikuti dengan digit yang mewakili jumlah argumen jenis generik. Tujuan dari mangling 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, pantulan mengembalikan nama Tuple`1 yang di-mangled 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. Dari Dictionary<TKey,TValue>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. Jika tidak, koma yang memisahkan bagian dari nama yang memenuhi syarat rakitan ditafsirkan sebagai pembatas argumen jenis tambahan. Misalnya, Dictionary<TKey,TValue> dari MyType dari MyAssembly.dll, dengan kunci jenis String, mungkin ditentukan sebagai berikut:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Nota

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 nullable adalah kasus khusus jenis generik. Misalnya, nullable Int32 diwakili oleh string "System.Nullable'1[System.Int32]".

Nota

Anda juga bisa mendapatkan jenis nullable menggunakan operator jenis. Misalnya, jenis nullable Boolean dikembalikan oleh typeof(Nullable<bool>) 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 Menggunakan
Dapat diubah ke null Int32 Type.GetType("System.Nullable`1[System.Int32]")
Penunjuk tidak terkelola ke MyType Type.GetType("MyType*")
Penunjuk yang tidak dikelola ke penunjuk ke MyType Type.GetType("MyType**")
Penunjuk terkelola atau referensi ke MyType Type.GetType("MyType&"). Perhatikan bahwa tidak seperti penunjuk, 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 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
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
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 rakitan untuk didapatkan. Lihat AssemblyQualifiedName. Jika jenis berada dalam rakitan yang sedang 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.

Atribut

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 merupakan 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 sintaksis 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 assembly-qualified-nya, yang dapat diperoleh dari AssemblyQualifiedName. GetType menyebabkan pemuatan rakitan yang ditentukan dalam typeName. Anda juga dapat memuat rakitan 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.

.NET Framework saja: 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 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 rakitan tersebut, dan mengambil jenis dari rakitan tersebut. Jika rakitan 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.

Di .NET Framework, untuk digunakan GetType pada modul dinamis, berlangganan peristiwa AppDomain.AssemblyResolve dan panggilan GetType sebelum menyimpan. Jika tidak, Anda akan mendapatkan dua salinan perakitan dalam memori.

Pada .NET Core 3.0 dan versi yang lebih baru, beban rakitan yang dipicu oleh API ini dipengaruhi oleh nilai saat ini dari AssemblyLoadContext.CurrentContextualReflectionContext.

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, akan TypeLoadException dilemparkan bahkan jika throwOnError adalah false.

Tabel berikut menunjukkan anggota-anggota kelas dasar yang dikembalikan oleh metode-metode Get ketika mencerminkan tipe.

Tipe Anggota Static Tidak Statis
Constructor No No
Ladang No Ya. Bidang selalu disembunyikan berdasarkan nama dan tanda tangan.
Event 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 No Ya. Metode (baik virtual maupun non-virtual) dapat disembunyikan berdasarkan nama atau berdasarkan nama dan tanda tangan.
Tipe Berlapis No No
Harta benda 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 komponen tanda tangan, termasuk modifikasi khusus, tipe pengembalian, tipe parameter, sentinel, dan konvensi pemanggilan yang tidak dikelola. Ini adalah perbandingan biner.

  2. Untuk refleksi, sifat dan kejadian disembunyikan berdasarkan nama dan tanda tangan. 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 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 akan 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 mangled ketika dikueri, sesuai dengan konvensi berikut.

Nota

Arsitektur prosesor adalah bagian dari identitas rakitan, dan dapat ditentukan sebagai bagian dari string nama perakitan. 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 perakitan. Lihat juga AssemblyName.ProcessorArchitecture.

Pemisah Meaning
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.
Titik (.) 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 layanan 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 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 diakhir dengan backtick (') diikuti dengan digit yang mewakili jumlah argumen jenis generik. Tujuan dari mangling 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, pantulan mengembalikan nama Tuple`1 yang di-mangled 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. Dari Dictionary<TKey,TValue>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. Jika tidak, koma yang memisahkan bagian dari nama yang memenuhi syarat rakitan ditafsirkan sebagai pembatas argumen jenis tambahan. Misalnya, Dictionary<TKey,TValue> dari MyType dari MyAssembly.dll, dengan kunci jenis String, mungkin ditentukan sebagai berikut:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Nota

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 nullable adalah kasus khusus jenis generik. Misalnya, nullable Int32 diwakili oleh string "System.Nullable'1[System.Int32]".

Nota

Anda juga bisa mendapatkan jenis nullable menggunakan operator jenis. Misalnya, jenis nullable Boolean dikembalikan oleh typeof(Nullable<bool>) 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 Menggunakan
Dapat diubah ke null Int32 Type.GetType("System.Nullable`1[System.Int32]")
Penunjuk tidak terkelola ke MyType Type.GetType("MyType*")
Penunjuk yang tidak dikelola ke penunjuk ke MyType Type.GetType("MyType**")
Penunjuk terkelola atau referensi ke MyType Type.GetType("MyType&"). Perhatikan bahwa tidak seperti penunjuk, 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 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
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
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 merupakan nama yang memenuhi syarat rakitan (lihat AssemblyQualifiedName), kecuali jenisnya berada dalam rakitan yang sedang 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 rakitan, 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 rakitan yang dikembalikan oleh assemblyResolver atau dengan resolusi rakitan standar. Jika tidak ada rakitan 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 jenis tidak ditemukan.

Atribut

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 dilewati).

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

Nota

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
Sumber:
Type.CoreCLR.cs
Sumber:
Type.CoreCLR.cs

Mendapatkan jenis dengan nama yang ditentukan, menentukan apakah akan melemparkan pengecualian jika jenis 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
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 merupakan nama yang memenuhi syarat rakitan (lihat AssemblyQualifiedName), kecuali jenisnya berada dalam rakitan yang sedang 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 rakitan, 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 rakitan yang dikembalikan oleh assemblyResolver atau dengan resolusi rakitan standar. Jika tidak ada rakitan 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.

Atribut

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 merupakan 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 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 parameter ignoreCase .

Berlaku untuk