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.
Panduan berikut berlaku untuk semua kelebihan beban:
- Properti dianggap publik dalam refleksi jika memiliki setidaknya satu aksesor yang bersifat publik. Jika tidak, properti dianggap privat, dan Anda harus menggunakan BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (di Visual Basic, gabungkan nilai menggunakan
Or) untuk mendapatkannya. - Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan PropertyInfo dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai.
- Jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, metode ini mencari properti batasan kelas.
metode GetProperty(String)
Pencarian name bersifat sensitif huruf besar/kecil. Pencarian mencakup properti statis publik dan instans publik.
Situasi di mana AmbiguousMatchException terjadi meliputi hal-hal berikut:
- Jenis berisi dua properti terindeks yang memiliki nama yang sama tetapi jumlah parameter yang berbeda. Untuk mengatasi ambiguitas, gunakan overload metode GetProperty yang menentukan jenis parameter.
- Jenis turunan mendeklarasikan properti yang menyembunyikan properti yang diwariskan dengan nama yang sama, dengan menggunakan pengubah
new(Shadowsdi Visual Basic). Untuk mengatasi ambiguitas, gunakan overload metode GetProperty(String, BindingFlags) dan tambahkan penanda BindingFlags.DeclaredOnly untuk membatasi pencarian ke anggota yang tidak diwariskan.
metode GetProperty(String, BindingFlags)
Bendera filter berikut BindingFlags dapat digunakan untuk menentukan properti mana yang akan disertakan dalam pencarian:
- Anda harus menentukan salah satu
BindingFlags.InstanceatauBindingFlags.Staticuntuk mendapatkan pengembalian. - Tentukan
BindingFlags.Publicuntuk menyertakan properti publik dalam pencarian. - Tentukan
BindingFlags.NonPublicuntuk menyertakan properti non-publik (yaitu, properti privat, internal, dan terlindungi) dalam pencarian. - Tentukan
BindingFlags.FlattenHierarchyuntuk menyertakanpublicdanprotectedanggota statis dalam hierarki ke atas; anggota statis sepertiprivatedi kelas yang diwariskan tidak disertakan.
Bendera pengubah berikut BindingFlags dapat digunakan untuk mengubah cara kerja pencarian:
-
BindingFlags.IgnoreCaseuntuk mengabaikan kasusname. -
BindingFlags.DeclaredOnlyuntuk mencari hanya properti yang dideklarasikan pada Type, bukan properti yang hanya diwariskan.
Situasi di mana AmbiguousMatchException terjadi meliputi hal-hal berikut:
- Jenis berisi dua properti terindeks yang memiliki nama yang sama tetapi jumlah parameter yang berbeda. Untuk mengatasi ambiguitas, gunakan overload metode GetProperty yang menentukan jenis parameter.
- Jenis turunan mendeklarasikan properti yang menyembunyikan properti yang diwariskan dengan nama yang sama, menggunakan pengubah
new(Shadowsdi Visual Basic). Untuk mengatasi ambiguitas, sertakan BindingFlags.DeclaredOnly untuk membatasi pencarian kepada anggota yang tidak diwariskan.
GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[])
Meskipun pengikat default tidak memproses ParameterModifier ( modifiers parameter), Anda dapat menggunakan kelas abstrak System.Reflection.Binder untuk menulis pengikat kustom yang memproses modifiers.
ParameterModifier hanya digunakan saat memanggil melalui interop COM, dan hanya parameter yang dioper melalui referensi yang dapat ditangani.
Tabel berikut menunjukkan anggota-anggota kelas dasar yang dikembalikan oleh metode-metode Get ketika mencerminkan tipe.
| Tipe Anggota | Statis | Tidak Statis |
|---|---|---|
| Pembangun | Tidak. | Tidak. |
| Bidang | Tidak. | Ya. Bidang selalu disembunyikan berdasarkan nama dan tanda tangan. |
| Peristiwa | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Reflection memperlakukan properti sebagai hide-by-name-and-signature. 2 |
| Metode | Tidak. | Ya. Metode (baik virtual maupun non-virtual) dapat disembunyikan berdasarkan nama atau berdasarkan nama dan tanda tangan. |
| Tipe Berlapis | Tidak. | Tidak. |
| Harta benda | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Reflection memperlakukan properti sebagai hide-by-name-and-signature. 2 |
Catatan:
- 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.
- 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.
- Atribut kustom bukan bagian dari sistem jenis umum.
Bendera filter berikut BindingFlags dapat digunakan untuk menentukan properti mana yang akan disertakan dalam pencarian:
- Anda harus menentukan salah satu
BindingFlags.InstanceatauBindingFlags.Staticuntuk mendapatkan pengembalian. - Tentukan
BindingFlags.Publicuntuk menyertakan properti publik dalam pencarian. - Tentukan
BindingFlags.NonPublicuntuk menyertakan properti non-publik (yaitu, properti privat, internal, dan terlindungi) dalam pencarian. - Tentukan
BindingFlags.FlattenHierarchyuntuk menyertakanpublicdanprotectedanggota statis dalam hierarki ke atas; anggota statis sepertiprivatedi kelas yang diwariskan tidak disertakan.
Bendera pengubah berikut BindingFlags dapat digunakan untuk mengubah cara kerja pencarian:
-
BindingFlags.IgnoreCaseuntuk mengabaikan kasusname. -
BindingFlags.DeclaredOnlyuntuk mencari hanya properti yang dideklarasikan pada Type, bukan properti yang hanya diwariskan.
Pengindeks dan properti default
Visual Basic, C#, dan C++ memiliki sintaks yang disederhanakan untuk mengakses properti terindeks dan memungkinkan satu properti terindeks menjadi default untuk jenisnya. Misalnya, jika variabel myList mengacu pada ArrayList, sintaks myList[3] (myList(3) dalam Visual Basic) mengambil elemen dengan indeks 3. Anda dapat membebani properti secara berlebihan.
Di C#, fitur ini disebut pengindeks dan tidak dapat dirujuk berdasarkan nama. Secara default, pengindeks C# muncul dalam metadata sebagai properti terindeks bernama Item. Namun, pengembang pustaka kelas dapat menggunakan IndexerNameAttribute atribut untuk mengubah nama pengindeks dalam metadata. Misalnya, String kelas memiliki pengindeks bernama Chars[]. Properti terindeks yang dibuat menggunakan bahasa selain C# juga dapat memiliki nama selain Item, .
Untuk menentukan apakah tipe memiliki properti default, gunakan metode GetCustomAttributes(Type, Boolean) untuk menguji atribut DefaultMemberAttribute. Jika jenis memiliki DefaultMemberAttribute, MemberName properti mengembalikan nama properti default.