2010-09-07 23 views
5

Có ai biết nếu có thể gọi phương thức trên đối tượng CLR thông qua trình chỉ mục sử dụng các tính năng lang động không? Ví dụ: myClrObj["SuperMethod"]() mà tôi có thể dễ dàng thực hiện trong javascript.C# Chỉ số động

cảm ơn trước.

Trả lời

1

Có thể có những cách tốt hơn, nhưng một trong những cách tôi muốn biết làm thế nào để làm điều đó là:

  • Tạo một lớp kế thừa từ DynamicObject
  • ghi đè các phương pháp thích hợp để nắm bắt được truy cập thông qua indexer
  • Tạo và lưu trữ một đại biểu tương ứng với phương pháp mà bạn tìm thấy thông qua đối số chỉ mục được cung cấp
  • Cung cấp phương pháp tiện ích phù hợp làm cho đối tượng của bạn xuất hiện động, với DynamicObject specializ chính xác ation instantiated.

    dynamic obj = myObj.AsIndexedObj(); obj["Do"]();

+0

Ý tưởng tuyệt vời nhưng không phù hợp. Tôi có các lớp học hiện tại không có nguồn gốc động. – AndrewG

+0

Bạn không cần phải lấy được các đối tượng của mình từ DynamicObject. Thay vào đó, tạo một cái gì đó của một bộ điều hợp tương tác động thay mặt cho đối tượng ban đầu của bạn. Điều này có lợi thế là nó có thể tái sử dụng được trên nhiều loại đối tượng – flq

0

Bạn có thể sử dụng ImpromptuInterfsce sẵn thông qua NuGet, nó kết thúc tốt đẹp API DLR để làm cho nó đơn giản để tự động gọi một phương thức theo tên, làm việc cho cả hai đối tượng năng động và poco. Nhanh hơn phản xạ cho các đối tượng poco.

Impromptu.InvokeMember(myClrObj,"SuperMethod") 
Các vấn đề liên quan