Kelas System.Type
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Kelas Type adalah akar System.Reflection fungsionalitas 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 perakitan 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, seperti metode privat atau internal, atau bidang yang dilindungi dari jenis kelas Anda tidak mewarisi, kode Anda harus memiliki ReflectionPermission. Lihat Pertimbangan Keamanan untuk Refleksi.
Type
adalah kelas dasar abstrak yang memungkinkan beberapa implementasi. Sistem akan selalu menyediakan kelas RuntimeType
turunan . Dalam refleksi, semua kelas yang dimulai dengan kata Runtime dibuat hanya sekali per objek dalam sistem dan mendukung operasi perbandingan.
Catatan
Dalam skenario multithreading, jangan mengunci Type objek untuk menyinkronkan akses ke static
data. Kode lain, di mana Anda tidak memiliki kontrol, mungkin juga mengunci jenis kelas Anda. Ini dapat mengakibatkan kebuntuan. Sebagai gantinya, sinkronkan akses ke data statis dengan mengunci objek privat static
.
Catatan
Kelas turunan dapat mengakses anggota yang dilindungi dari kelas dasar kode panggilan. Selain itu, akses diizinkan untuk mengumpulkan anggota perakitan kode panggilan. Sebagai aturan, jika Anda diizinkan mengakses dalam kode terikat awal, maka Anda juga diizinkan mengakses dalam kode yang terlambat terikat.
Catatan
Antarmuka yang memperluas antarmuka lain tidak mewarisi metode yang ditentukan dalam antarmuka yang diperluas.
Jenis apa yang diwakili objek Tipe?
Kelas ini aman; beberapa utas dapat dibaca secara bersamaan dari instans jenis ini. Instans Type kelas dapat mewakili salah satu jenis berikut:
- Kelas
- Jenis nilai
- Larik
- Antarmuka
- Enumerasi
- Delegasikan
- 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 Jenis
Objek Type yang terkait dengan jenis tertentu dapat diperoleh dengan cara berikut:
Metode instans Object.GetTypeType mengembalikan objek yang mewakili jenis instans. Karena semua jenis terkelola berasal dari Object, GetType metode dapat dipanggil pada instans jenis apa pun.
Contoh berikut memanggil Object.GetType metode untuk menentukan jenis runtime setiap objek dalam array objek.
object[] values = { "word", true, 120, 136.34, 'a' }; foreach (var value in values) Console.WriteLine("{0} - type {1}", value, value.GetType().Name); // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type Char
let 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 Char
Module 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 Char
Metode statis Type.GetType mengembalikan Type objek yang mewakili jenis yang ditentukan oleh nama yang sepenuhnya memenuhi syarat.
Metode Module.GetTypes, Module.GetType, dan Module.FindTypes mengembalikan
Type
objek yang mewakili jenis yang ditentukan dalam modul. Metode pertama dapat digunakan untuk mendapatkan array Type objek untuk semua jenis publik dan privat yang ditentukan dalam modul. (Anda dapat memperoleh instans melaluiModule
Assembly.GetModule metode atau Assembly.GetModules , atau melalui Type.Module properti .)Objek System.Reflection.Assembly berisi sejumlah metode untuk mengambil kelas yang ditentukan dalam rakitan, termasuk Assembly.GetType, , Assembly.GetTypesdan Assembly.GetExportedTypes.
Metode mengembalikan FindInterfaces daftar jenis antarmuka yang difilter yang didukung oleh jenis.
Metode GetElementType mengembalikan
Type
objek yang mewakili elemen .Metode GetInterfaces dan GetInterface mengembalikan Type objek yang mewakili jenis antarmuka yang didukung oleh jenis.
Metode mengembalikan GetTypeArray array Type objek 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 Type objek yang mewakili jenis yang ditentukan oleh
ProgID
atauCLSID
.Metode GetTypeFromHandle ini disediakan untuk interoperabilitas. Ini mengembalikan
Type
objek yang mewakili jenis yang ditentukan oleh handel kelas.Operator C#
typeof
, operator C++typeid
, dan operator Visual BasicGetType
mendapatkanType
objek untuk jenis.Metode mengembalikan MakeGenericType objek yang Type mewakili jenis generik yang dibangun, yang merupakan jenis konstruksi terbuka jika propertinya ContainsGenericParameters mengembalikan
true
, dan jenis konstruksi tertutup sebaliknya. Jenis generik hanya dapat dibuat jika ditutup.Metode MakeArrayType, MakePointerType, dan MakeByRefType mengembalikan Type objek yang mewakili, masing-masing, array dari jenis tertentu, penunjuk ke jenis tertentu, dan jenis parameter referensi (
ref
dalam C#, 'byref' di F#,ByRef
di Visual Basic).
Membandingkan objek jenis untuk kesetaraan
Objek Type yang mewakili jenis bersifat unik; yaitu, dua Type referensi objek merujuk ke objek yang sama jika dan hanya jika mewakili jenis yang sama. Ini memungkinkan perbandingan Type objek menggunakan kesetaraan referensi. Contoh berikut membandingkan Type objek 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: {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()));
// 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk