Refleksi dalam .NET
Kelas di namespace System.Reflection, bersama dengan System.Type, memungkinkan Anda untuk mendapatkan informasi tentang rakitan yang dimuat dan jenis yang ditentukan di dalamnya, seperti kelas, antarmuka, dan jenis nilai (yaitu, struktur dan enumerasi). Anda juga dapat menggunakan pantulan untuk membuat instans jenis pada durasi, dan untuk memanggil dan mengaksesnya.
Rakitan berisi modul, modul berisi jenis, dan jenis berisi anggota. Reflection menyediakan objek yang merangkum rakitan, modul, dan jenis. Anda dapat menggunakan refleksi untuk membuat instans jenis secara dinamis, mengikat jenis ke objek yang ada, atau mendapatkan jenis dari objek yang ada dan memanggil metodenya atau mengakses bidang dan propertinya. Anda kemudian dapat memanggil metode jenis atau mengakses bidang dan propertinya. Penggunaan refleksi umum meliputi hal berikut:
- Gunakan Assembly untuk menentukan dan memuat rakitan, memuat modul yang tercantum dalam manifes perakitan, dan menemukan jenis dari rakitan ini dan membuat instansnya.
- Gunakan Module untuk menemukan informasi seperti rakitan yang berisi modul dan kelas dalam modul. Anda juga bisa mendapatkan semua metode global atau metode non-global tertentu lainnya yang ditentukan pada modul.
- Gunakan ConstructorInfo untuk menemukan informasi seperti nama, parameter, pengubah akses (seperti
public
atauprivate
), dan detail implementasi (sepertiabstract
atauvirtual
) dari konstruktor. Gunakan metode GetConstructors atau GetConstructor dari Type untuk memanggil konstruktor tertentu. - Gunakan MethodInfo untuk menemukan informasi seperti nama, jenis pengembalian, parameter, pengubah akses, dan detail implementasi (seperti
abstract
atauvirtual
) dari metode. Gunakan metode GetMethods atau GetMethod dari Type untuk memanggil konstruktor tertentu. - Gunakan FieldInfo untuk menemukan informasi seperti nama, pengubah akses, dan detail implementasi (seperti
static
) bidang, dan untuk mendapatkan atau mengatur nilai bidang. - Gunakan EventInfo untuk menemukan informasi seperti nama, jenis data penanganan aktivitas, atribut kustom, jenis deklarasi, dan jenis peristiwa yang tercermin, dan untuk menambahkan atau menghapus penanganan aktivitas.
- Gunakan PropertyInfo untuk menemukan informasi seperti nama, tipe data, jenis deklarasi, jenis yang tercermin, dan status properti baca-saja atau bisa-tulis, dan untuk mendapatkan atau mengatur nilai properti.
- Gunakan ParameterInfo untuk menemukan informasi seperti nama parameter, jenis data, apakah parameter adalah parameter input atau output, dan posisi parameter dalam tanda tangan metode.
- Gunakan CustomAttributeData untuk menemukan informasi tentang atribut kustom saat Anda bekerja dalam MetadataLoadContext konteks atau hanya refleksi (.NET Framework). CustomAttributeData memungkinkan Anda memeriksa atribut tanpa membuat instansnya.
Kelas namespace System.Reflection.Emit menyediakan bentuk pantulan khusus yang memungkinkan Anda membuat jenis pada durasi.
Pantulan juga dapat digunakan untuk membuat browser jenis, yang memungkinkan pengguna untuk memilih jenis lalu melihat informasi tentang jenis tersebut.
Ada kegunaan lain untuk refleksi. Pengkompilasi untuk bahasa seperti Jscript menggunakan refleksi untuk membuat tabel simbol. Kelas di namespace System.Runtime.Serialization menggunakan pantulan untuk mengakses data dan menentukan bidang mana yang akan dipertahankan. Kelas di namespace System.Runtime.Remoting menggunakan refleksi secara tidak langsung melalui serialisasi.
Jenis runtime dalam refleksi
Refleksi menyediakan kelas, seperti Type dan MethodInfo, untuk mewakili jenis, anggota, parameter, dan entitas kode lainnya. Namun, ketika Anda menggunakan pantulan, Anda tidak bekerja langsung dengan kelas-kelas ini, yang sebagian besar abstrak (MustInherit
dalam Visual Basic). Sebagai gantinya, Anda bekerja dengan jenis yang disediakan oleh runtime bahasa umum (CLR).
Misalnya, ketika Anda menggunakan operator typeof
C# (GetType
dalam Visual Basic) untuk mendapatkan objek Type, objek tersebut adalah benar-benar RuntimeType
. RuntimeType
berasal dari Type dan menyediakan implementasi dari semua metode abstrak.
Kelas runtime ini adalah internal
(Friend
dalam Visual Basic). Mereka tidak di dokumentasikan secara terpisah dari kelas dasar mereka, karena perilakunya dijelaskan oleh dokumentasi kelas dasar.