Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Kelas Type adalah akar fungsionalitas System.Reflection dan merupakan cara utama untuk mengakses metadata. Gunakan anggota Type untuk mendapatkan informasi tentang deklarasi jenis, tentang anggota jenis (seperti konstruktor, metode, bidang, properti, dan peristiwa kelas), serta modul dan rakitan tempat kelas disebarkan.
Tidak ada izin yang diperlukan agar kode dapat menggunakan pantulan untuk mendapatkan informasi tentang jenis dan anggotanya, terlepas dari tingkat akses mereka. Tidak ada izin yang diperlukan agar kode menggunakan refleksi untuk mengakses anggota publik, atau anggota lain yang tingkat aksesnya akan membuatnya terlihat selama kompilasi normal. Namun, agar kode Anda menggunakan refleksi untuk mengakses anggota yang biasanya tidak dapat diakses secara normal, seperti metode privat atau internal, atau bidang terlindungi dari jenis yang bukan pewarisan kelas Anda, kode Anda harus memiliki ReflectionPermission. Lihat Pertimbangan Keamanan untuk Refleksi pada.
Type adalah kelas dasar abstrak yang memungkinkan beberapa implementasi. Sistem akan selalu menyediakan kelas turunan RuntimeType. Dalam refleksi, semua kelas yang dimulai dengan kata Runtime dibuat hanya sekali per objek dalam sistem dan mendukung operasi perbandingan.
Nota
Dalam skenario multithreading, jangan mengunci objek Type untuk menyinkronkan akses ke data static. Kode lain, yang tidak dapat Anda kendalikan, mungkin juga mengunci jenis kelas Anda. Ini dapat mengakibatkan kebuntuan. Sebagai gantinya, sinkronkan akses ke data statis dengan mengunci objek static privat.
Nota
Kelas turunan dapat mengakses anggota yang dilindungi dari kelas dasar kode panggilan. Selain itu, akses diberikan kepada anggota majelis dari majelis kode panggilan. Sebagai aturan, jika Anda diizinkan mengakses kode terikat awal, maka Anda juga diizinkan mengakses kode terikat akhir.
Nota
Antarmuka yang memperluas antarmuka lain tidak mewarisi metode yang ditentukan dalam antarmuka yang diperluas.
Jenis apa yang diwakili objek Tipe?
Kelas ini aman terhadap penggunaan oleh banyak utas; beberapa utas dapat secara bersamaan membaca dari instans jenis ini. Instans kelas Type dapat mewakili salah satu jenis berikut:
- Kelas
- Jenis nilai
- Larik
- Antarmuka
- Enumerasi
- Perwakilan
- Jenis generik yang dibuat dan definisi jenis generik
- Ketik argumen dan parameter jenis jenis jenis generik yang dibangun, definisi jenis generik, dan definisi metode generik
Mengambil objek Tipe
Objek Type yang terkait dengan jenis tertentu dapat diperoleh dengan cara berikut:
Metode Object.GetType instans mengembalikan objek Type yang mewakili jenis instans. Karena semua jenis terkelola berasal dari Object, metode GetType dapat dipanggil pada instans jenis apa pun.
Contoh berikut memanggil metode Object.GetType untuk menentukan jenis runtime setiap objek dalam array objek.
object[] values = { "word", true, 120, 136.34, 'a' }; foreach (var value in values) Console.WriteLine($"{value} - type {value.GetType().Name}"); // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type Charlet values: obj[] = [| "word"; true; 120; 136.34; 'a' |] for value in values do printfn $"{value} - type {value.GetType().Name}" // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type CharModule Example1 Public Sub Main() Dim values() As Object = { "word", True, 120, 136.34, "a"c } For Each value In values Console.WriteLine("{0} - type {1}", value, value.GetType().Name) Next End Sub End Module ' The example displays the following output: ' word - type String ' True - type Boolean ' 120 - type Int32 ' 136.34 - type Double ' a - type CharMetode statis Type.GetType mengembalikan objek Type yang mewakili jenis yang ditentukan oleh nama lengkapnya.
Metode Module.GetTypes, Module.GetType, dan Module.FindTypes mengembalikan objek
Typeyang mewakili jenis yang ditentukan dalam modul. Metode pertama dapat digunakan untuk mendapatkan array objek Type untuk semua jenis publik dan privat yang ditentukan dalam modul. (Anda dapat memperoleh instansModulemelalui metode Assembly.GetModule atau Assembly.GetModules, atau melalui properti Type.Module.)Objek System.Reflection.Assembly berisi sejumlah metode untuk mengambil kelas yang ditentukan dalam rakitan, termasuk Assembly.GetType, Assembly.GetTypes, dan Assembly.GetExportedTypes.
Metode FindInterfaces mengembalikan daftar jenis-jenis antarmuka yang telah difilter yang didukung oleh tipe tersebut.
Metode GetElementType mengembalikan objek
Typeyang mewakili elemen .Metode GetInterfaces dan GetInterface mengembalikan objek Type yang mewakili tipe antarmuka yang didukung oleh suatu tipe.
Metode GetTypeArray mengembalikan array objek Type yang mewakili jenis yang ditentukan oleh sekumpulan objek arbitrer. Objek ditentukan dengan array jenis Object.
Metode GetTypeFromProgID dan GetTypeFromCLSID disediakan untuk interoperabilitas COM. Mereka mengembalikan objek Type yang mewakili jenis yang ditentukan oleh
ProgIDatauCLSID.Metode GetTypeFromHandle disediakan untuk interoperabilitas. Ini mengembalikan objek
Typeyang mewakili tipe yang ditentukan oleh pengendali kelas.Operator
typeofC#, operatortypeidC++, dan operatorGetTypeVisual Basic mendapatkan objekTypeuntuk jenis.Metode MakeGenericType mengembalikan objek Type yang mewakili jenis generik yang dibangun, yang merupakan jenis konstruksi terbuka jika properti ContainsGenericParameters mengembalikan
true, dan jenis konstruksi tertutup sebaliknya. Jenis generik hanya dapat diinstansiasi jika tipe tersebut tertutup.Metode MakeArrayType, MakePointerType, dan MakeByRefType mengembalikan objek Type yang mewakili, masing-masing, array dari jenis tertentu, penunjuk ke jenis tertentu, dan jenis parameter referensi (
refdi C#, 'byref' di F#,ByRefdi Visual Basic).
Membandingkan objek jenis untuk kesetaraan
Objek Type yang mewakili jenis unik; artinya, dua referensi objek Type merujuk ke objek yang sama jika dan hanya jika mewakili jenis yang sama. Ini memungkinkan perbandingan objek Type menggunakan kesetaraan referensi. Contoh berikut membandingkan objek Type yang mewakili sejumlah nilai bilangan bulat untuk menentukan apakah objek tersebut memiliki jenis yang sama.
long number1 = 1635429;
int number2 = 16203;
double number3 = 1639.41;
long number4 = 193685412;
// Get the type of number1.
Type t = number1.GetType();
// Compare types of all objects with number1.
Console.WriteLine($"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}");
Console.WriteLine($"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}");
Console.WriteLine($"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}");
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
let number1 = 1635429L
let number2 = 16203
let number3 = 1639.41
let number4 = 193685412L
// Get the type of number1.
let t = number1.GetType()
// Compare types of all objects with number1.
printfn $"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}"
printfn $"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}"
printfn $"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}"
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
Module Example
Public Sub Main()
Dim number1 As Long = 1635429
Dim number2 As Integer = 16203
Dim number3 As Double = 1639.41
Dim number4 As Long = 193685412
' Get the type of number1.
Dim t As Type = number1.GetType()
' Compare types of all objects with number1.
Console.WriteLine("Type of number1 and number2 are equal: {0}",
Object.ReferenceEquals(t, number2.GetType()))
Console.WriteLine("Type of number1 and number3 are equal: {0}",
Object.ReferenceEquals(t, number3.GetType()))
Console.WriteLine("Type of number1 and number4 are equal: {0}",
Object.ReferenceEquals(t, number4.GetType()))
End Sub
End Module
' The example displays the following output:
' Type of number1 and number2 are equal: False
' Type of number1 and number3 are equal: False
' Type of number1 and number4 are equal: True