Metode System.Type.GetProperty
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
metode GetProperty(String)
Pencarian peka name
huruf besar/kecil. Pencarian mencakup properti statis publik dan instans publik.
Properti dianggap publik untuk direfleksikan jika memiliki setidaknya satu aksesor yang bersifat publik. Jika tidak, properti dianggap privat, dan Anda harus menggunakan BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.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.
Situasi yang 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 kelebihan beban GetProperty metode yang menentukan jenis parameter.
- Jenis turunan mendeklarasikan properti yang menyembunyikan properti yang diwariskan dengan nama yang sama, dengan menggunakan pengubah
new
(Shadows
di Visual Basic). Untuk mengatasi ambiguitas, gunakan GetProperty(String, BindingFlags) metode kelebihan beban dan tambahkan BindingFlags.DeclaredOnly bendera untuk membatasi pencarian ke anggota yang tidak diwariskan.
metode GetProperty(String, BindingFlags)
Properti dianggap publik untuk direfleksikan jika memiliki setidaknya satu aksesor yang bersifat publik. Jika tidak, properti dianggap privat, dan Anda harus menggunakan BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (di Visual Basic, gabungkan nilai menggunakan Or
) untuk mendapatkannya.
Bendera filter berikut BindingFlags dapat digunakan untuk menentukan properti mana yang akan disertakan dalam pencarian:
- Anda harus menentukan salah satu
BindingFlags.Instance
atauBindingFlags.Static
untuk mendapatkan pengembalian. - Tentukan
BindingFlags.Public
untuk menyertakan properti publik dalam pencarian. - Tentukan
BindingFlags.NonPublic
untuk menyertakan properti non-publik (yaitu, properti privat, internal, dan terlindungi) dalam pencarian. - Tentukan
BindingFlags.FlattenHierarchy
untuk menyertakanpublic
danprotected
anggota statis meningkatkan hierarki;private
anggota statis di kelas yang diwariskan tidak disertakan.
Bendera pengubah berikut BindingFlags dapat digunakan untuk mengubah cara kerja pencarian:
BindingFlags.IgnoreCase
untuk mengabaikan kasusname
.BindingFlags.DeclaredOnly
untuk mencari hanya properti yang dideklarasikan pada Type, bukan properti yang hanya diwariskan.
Lihat System.Reflection.BindingFlags untuk informasi lebih lanjut.
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.
Situasi yang 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 kelebihan beban GetProperty metode yang menentukan jenis parameter.
- Jenis turunan mendeklarasikan properti yang menyembunyikan properti yang diwariskan dengan nama yang sama, menggunakan pengubah
new
(Shadows
di 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[])
Properti dianggap publik untuk direfleksikan jika memiliki setidaknya satu aksesor yang bersifat publik. Jika tidak, properti dianggap privat, dan Anda harus menggunakan BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (di Visual Basic, gabungkan nilai menggunakan Or
) untuk mendapatkannya.
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 diteruskan oleh referensi yang ditangani.
Tabel berikut menunjukkan anggota kelas dasar yang dikembalikan oleh Get
metode saat mencerminkan jenis.
Jenis anggota | Statis | Non-Statis |
---|---|---|
Konstruktor | Tidak | Tidak |
Bidang | No | Ya. Bidang selalu disembunyikan menurut nama dan tanda tangan. |
Aktivitas | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature.2 |
Metode | No | Ya. Metode (baik virtual maupun non-virtual) dapat berupa hide-by-name atau hide-by-name-and-signature. |
Tipe Berlapis | Tidak | Tidak |
Properti | Tidak berlaku | Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature.2 |
Catatan:
- Hide-by-name-and-signature mempertimbangkan semua bagian tanda tangan, termasuk pengubah kustom, jenis pengembalian, jenis parameter, sentinel, dan konvensi panggilan yang tidak dikelola. Ini adalah perbandingan biner.
- Untuk refleksi, properti dan peristiwa adalah hide-by-name-and-signature. 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.Instance
atauBindingFlags.Static
untuk mendapatkan pengembalian. - Tentukan
BindingFlags.Public
untuk menyertakan properti publik dalam pencarian. - Tentukan
BindingFlags.NonPublic
untuk menyertakan properti non-publik (yaitu, properti privat, internal, dan terlindungi) dalam pencarian. - Tentukan
BindingFlags.FlattenHierarchy
untuk menyertakanpublic
danprotected
anggota statis meningkatkan hierarki;private
anggota statis di kelas yang diwariskan tidak disertakan.
Bendera pengubah berikut BindingFlags dapat digunakan untuk mengubah cara kerja pencarian:
BindingFlags.IgnoreCase
untuk mengabaikan kasusname
.BindingFlags.DeclaredOnly
untuk mencari hanya properti yang dideklarasikan pada Type, bukan properti yang hanya diwariskan.
Lihat System.Reflection.BindingFlags untuk informasi lebih lanjut.
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.
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 jenis memiliki properti default, gunakan GetCustomAttributes(Type, Boolean) metode untuk DefaultMemberAttribute menguji atribut. Jika jenis memiliki DefaultMemberAttribute, MemberName properti mengembalikan nama properti default.
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