Mungkin menggunakan pola dinamis? Anda dapat memanggil metode / properti apa pun menggunakan kata kunci dinamis, bukan? Bagaimana memeriksa apakah metode tersebut ada sebelum memanggil myDynamicObject.DoStuff (), misalnya?
c#
.net
methods
reflection
properties
Louis Rhys
sumber
sumber
DynamicObject
?Jawaban:
Anda dapat menulis sesuatu seperti itu:
Sunting: Anda bahkan dapat melakukan metode ekstensi dan menggunakannya seperti ini
sumber
melalui Refleksi
Serupa untuk metode
sumber
GetType()
sana ada metode likeGetProperties()
. Ini mengembalikan arrayPropertyInfo
. Tetapi bagaimana saya bisa menggunakanGetProperties()
metode?Itu adalah pertanyaan lama, tetapi saya hanya menabraknya.
Type.GetMethod(string name)
akan melempar AmbiguousMatchException jika ada lebih dari satu metode dengan nama itu, jadi kami lebih baik menangani kasus itusumber
Bukankah lebih baik tidak menggunakan tipe dinamis apa pun untuk ini, dan biarkan kelas Anda mengimplementasikan antarmuka. Kemudian, Anda dapat memeriksa pada saat runtime apakah suatu objek mengimplementasikan antarmuka itu, dan dengan demikian, memiliki metode yang diharapkan (atau properti).
Saya pikir ini adalah satu-satunya cara yang benar.
Hal yang Anda maksud adalah bebek-mengetik, yang berguna dalam skenario di mana Anda sudah tahu bahwa objek memiliki metode, tetapi kompilator tidak dapat memeriksa itu. Ini berguna dalam skenario interop COM misalnya. (periksa artikel ini )
Jika Anda ingin menggabungkan bebek-mengetik dengan refleksi misalnya, maka saya pikir Anda kehilangan tujuan mengetik bebek.
sumber