Jadi ini tampaknya cukup mendasar tetapi saya tidak bisa membuatnya berfungsi. Saya memiliki sebuah Objek, dan saya menggunakan refleksi untuk mendapatkan properti publiknya. Salah satu properti ini statis dan saya tidak beruntung mendapatkannya.
Public Function GetProp(ByRef obj As Object, ByVal propName as String) as PropertyInfo
Return obj.GetType.GetProperty(propName)
End Function
Kode di atas berfungsi dengan baik untuk properti Instans Publik, yang hingga saat ini adalah semua yang saya butuhkan. Seharusnya saya dapat menggunakan BindingFlags untuk meminta jenis properti lain (pribadi, statis), tetapi saya tidak dapat menemukan kombinasi yang tepat.
Public Function GetProp(ByRef obj As Object, ByVal propName as String) as PropertyInfo
Return obj.GetType.GetProperty(propName, Reflection.BindingFlags.Static Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public)
End Function
Tapi tetap saja, meminta anggota Statis tidak menghasilkan apa-apa. Reflektor NET dapat melihat properti statis dengan baik, jadi jelas saya kehilangan sesuatu di sini.
.net
reflection
static
Corey Downie
sumber
sumber
Jawaban:
Atau lihat saja ini ...
sumber
p.GetValue(null);
bekerja juga. Yang keduanull
tidak diperlukan.Ini adalah C #, tetapi seharusnya memberi Anda ide:
(Anda hanya perlu ATAU NonPublik dan Statis)
sumber
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy
adalah satu-satunya hal yang berhasil bagi saya.Sedikit kejelasan ...
sumber
BindingFlags.Instance | BindingFlags.Static
memecahkannya untuk saya.Oke, jadi kuncinya bagi saya adalah menggunakan .FlattenHierarchy BindingFlag. Saya tidak begitu tahu mengapa saya menambahkannya pada sebuah firasat dan itu mulai bekerja. Jadi solusi terakhir yang memungkinkan saya mendapatkan Instans Publik atau Properti Statis adalah:
sumber
Ini akan mengembalikan semua properti statis dalam kelas dasar statis atau tipe tertentu dan mungkin anak juga.
sumber
Hanya ingin mengklarifikasi ini untuk diri saya sendiri, saat menggunakan API refleksi baru berdasarkan
TypeInfo
- di manaBindingFlags
tidak tersedia secara andal (tergantung pada kerangka kerja target).Dalam refleksi 'baru', untuk mendapatkan properti statis untuk suatu tipe (tidak termasuk kelas dasar) Anda harus melakukan sesuatu seperti:
Melayani baik untuk properti hanya baca atau hanya tulis (meskipun hanya tulis adalah ide yang buruk).
The
DeclaredProperties
anggota, juga tidak membedakan antara sifat dengan publik / accesor pribadi - sehingga untuk menyaring sekitar visibilitas, maka Anda perlu melakukannya berdasarkan accessor Anda perlu menggunakan. Misalnya - dengan asumsi panggilan di atas telah kembali, Anda dapat melakukan:Ada beberapa metode pintasan yang tersedia - tetapi pada akhirnya kita semua akan menulis lebih banyak metode ekstensi di sekitar
TypeInfo
metode / properti kueri di masa mendatang. Selain itu, API baru memaksa kita untuk memikirkan dengan tepat apa yang kita anggap sebagai properti 'pribadi' atau 'publik' mulai sekarang - karena kita harus menyaring diri kita sendiri berdasarkan pengakses individu.sumber
Di bawah ini sepertinya berhasil untuk saya.
sumber
Coba link C # Reflection ini .
Perhatikan, menurut saya BindingFlags.Instance dan BindingFlags.Static bersifat eksklusif.
sumber