2008-10-29 26 views
6

Thực hiện -semantics "phương pháp-mất tích" và như vậy trong C# 4.0, bạn phải thực hiện IDynamicObject:Làm thế nào để bạn triển khai giao diện IDynamicObject của C# 4?

public interface IDynamicObject 
{ 
    MetaObject GetMetaObject(Expression parameter); 
} 

Theo như tôi có thể tìm ra IDynamicObject thực sự là một phần của DLR, vì vậy nó không phải là mới . Nhưng tôi đã không thể tìm thấy nhiều tài liệu về nó.

Có một số ví dụ triển khai ví dụ rất đơn giản (f.x. herehere), nhưng bất kỳ ai có thể chỉ cho tôi triển khai đầy đủ hơn hoặc một số tài liệu thực?

Đặc biệt, bạn có thể xử lý thông số "tham số" chính xác như thế nào?

Trả lời

4

Câu trả lời ngắn gọn là MetaObject là những gì có trách nhiệm thực sự tạo mã sẽ được chạy tại trang web cuộc gọi. Cơ chế mà nó sử dụng cho điều này là các cây biểu thức LINQ, đã được tăng cường trong DLR. Vì vậy, thay vì bắt đầu với một đối tượng, nó bắt đầu với một biểu thức đại diện cho đối tượng, và cuối cùng nó sẽ cần phải trả về một cây biểu hiện mô tả hành động được thực hiện.

Khi chơi với điều này, hãy nhớ rằng phiên bản của System.Core trong CTP đã được lấy từ một ảnh chụp nhanh vào cuối tháng Tám. Nó không tương ứng rất rõ ràng với bất kỳ phiên bản beta cụ thể nào của IronPython. Một số thay đổi đã được thực hiện cho DLR kể từ đó.

Ngoài ra, để tương thích với hệ thống CLR v2.Các bản phát hành của IronPython bắt đầu bằng beta 4 hoặc beta 5 bây giờ đổi tên mọi thứ trong không gian tên Hệ thống thành không gian tên Microsoft.

0

Dưới đây là những gì tôi đã tìm ra cho đến nay:

Các Dynamic Language Runtime hiện được duy trì như một phần của IronPython project. Vì vậy, đó là nơi tốt nhất để đi cho thông tin.

Cách dễ nhất để triển khai lớp hỗ trợ IDynamicObject có vẻ là lấy được từ Microsoft.Scripting.Actions.Dynamic và ghi đè các phương thức liên quan, ví dụ như phương thức Gọi để thực hiện ngữ nghĩa gọi hàm. Nó trông giống như Microsoft.Scripting.Actions.Dynamic chưa được bao gồm trong CTP, nhưng một từ IronPython 2.0 có vẻ như nó sẽ làm việc.

Tôi vẫn chưa rõ ý nghĩa chính xác của tham số "tham số", nhưng dường như nó cung cấp ngữ cảnh cho sự ràng buộc của đối tượng động.

3

Nếu bạn muốn chấm dứt chấm dứt mẫu bao gồm cả mã nguồn, dẫn đến một đối tượng năng động lưu trữ giá trị cho các thuộc tính tùy ý trong một từ điển rồi my post "A first look at Duck Typing in C# 4.0" có thể phù hợp với bạn. Tôi đã viết bài đó để cho thấy cách đối tượng động có thể được đúc thành các giao diện được gõ tĩnh. Nó có một thực hiện làm việc hoàn chỉnh của một Duck đó là một IDynamicObject và có thể hoạt động như một IQuack.

Nếu bạn cần thêm thông tin, hãy liên hệ với tôi trên blog của mình và tôi sẽ giúp bạn, tốt nhất có thể.

Các vấn đề liên quan