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 atau BindingFlags.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 menyertakan public dan protected 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 kasus name.
  • 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:

  1. 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.
  2. 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.
  3. 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 atau BindingFlags.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 menyertakan public dan protected 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 kasus name.
  • 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.