Khi tôi muốn tự động gọi tĩnh được xác định ("tĩnh" theo nghĩa "được xác định tại thời gian biên dịch", không theo nghĩa "thành viên cấp lớp") trên bất kỳ đối tượng nào trong C#, tôi có thể sử dụng phản ánh để có được một xử lý cho phương pháp đó và gọi nó:Làm cách nào để tự động gọi một phương thức trên một đối tượng động?
typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });
Tuy nhiên, các đối tượng làm động bằng cách kế thừa từ DynamicObject
đáp ứng với (không xác định) phương pháp dụ gọi sử dụng TryInvokeMember
, và các phương pháp năng động lớp đáp ứng không tiếp xúc thông qua phản ánh, vì lý do rõ ràng. Điều này có nghĩa là tôi không thể xử lý phương thức cho phương thức sẽ được trả lời bởi TryInvokeMember
. Vì vậy, trớ trêu thay, có vẻ như với tôi rằng bạn không thể tự động gọi một phương thức động trên một đối tượng dynamic
dễ dàng như bạn có thể gọi một phương thức được xác định trên một đối tượng không phải là dynamic
.
Tôi đã cân nhắc gọi trực tiếp số TryInvokeMember
, nhưng đối số đầu tiên phải là một phiên bản của một lớp trừu tượng InvokeMemberBinder
. Tôi cảm thấy rằng nếu tôi phải thực hiện một lớp học để gọi một phương pháp năng động trên một đối tượng năng động, tôi phải làm điều gì đó sai trái.
Làm thế nào tôi có thể gọi một phương thức trên một đối tượng dynamic
theo tên của nó, biết rằng lớp mục tiêu không không thực hiện nó và nó nên được đáp lại bằng TryInvokeMember
?
Âm thanh vui nhộn. Tôi sẽ chờ đợi để xem một người nào đó thực sự có một giải pháp được hỗ trợ vì tôi có thể sẽ không được xung quanh nữa khi điều này ngừng hoạt động. – zneak
Mặt khác, vì đó là những gì trình biên dịch đã làm, nó sẽ không bao giờ ngừng hoạt động, vì điều đó sẽ chỉ giết bất kỳ ứng dụng nào bằng cách sử dụng 'dynamic' được xây dựng ngày hôm nay. – zneak
@zneak Đúng vậy, tôi nghĩ đó là một cược khá an toàn. Thật đáng ngạc nhiên khi họ đã đi đến độ dài lớn như vậy để đảm bảo các loại được ẩn. – Trillian