2008-10-31 35 views
13

Việc sử dụng chúng là gì nếu bạn gọi phương thức, nó có thể không tồn tại?Việc sử dụng thực tế biến "động" trong C# 4.0 là gì?

Điều đó có nghĩa là bạn có thể tự động tạo phương thức trên đối tượng động không?

Việc sử dụng thực tế điều này là gì?

+0

Xin lỗi liên kết ở trên dường như không được làm việc một cách chính xác, bắt đầu từ http://microsoftpdc.com/ và bạn có thể điều hướng thông qua các phiên giao dịch để truy cập video. – MrJavaGuy

+0

Bài viết liên quan [ở đây] (https://stackoverflow.com/q/2690623/465053) và [ở đây] (https://stackoverflow.com/q/2255982/465053) – RBT

Trả lời

14

Bạn sẽ không thực sự có thể tạo phương thức - nhưng bạn có thể thực hiện IDynamicMetaObject (thường bằng cách mở rộng DynamicObject) để trả lời như thể phương thức tồn tại.

Sử dụng:

  • Lập trình chống lại các đối tượng COM với một API yếu (ví dụ như văn phòng)
  • Calling sang ngôn ngữ động như Ruby/Python
  • có khả năng làm "explorable" đối tượng - tưởng tượng một XPath- như truy vấn nhưng thông qua một phương thức/thuộc tính gọi ví dụ document.RootElement.Person[5].Name["Attribute"]
  • Không nghi ngờ gì nhiều hơn nữa, chúng tôi vẫn chưa nghĩ ra :)
+2

Tôi thực sự thích ý tưởng XML đó. Điều này có liên quan đến một số loại túi tài sản tùy chỉnh? – tsilb

+0

Nó sẽ là một chút giống như một túi tài sản, nhưng tôi mong đợi nó để bọc LINQ to XML đối tượng và tìm các yếu tố lên khi cần thiết hơn là lấy tất cả chúng về sáng tạo. Tên đã thay đổi một chút kể từ khi tôi viết bài này - Tôi sẽ cập nhật ... –

3

Trước hết, bạn không thể sử dụng nó ngay bây giờ. Đó là một phần của C# 4, sẽ được phát hành trong tương lai.

Về cơ bản, nó dành cho một đối tượng có thuộc tính sẽ không được biết cho đến khi chạy. Có lẽ nó đến từ một đối tượng COM. Có lẽ đó là một "xác định trên vật thể bay" như bạn mô tả (mặc dù tôi không nghĩ rằng có một cơ sở để tạo ra những người chưa hoặc lên kế hoạch).

Nó giống như một System.Object, ngoại trừ việc bạn được phép gọi các phương thức mà trình biên dịch không biết, và thời gian chạy tìm ra cách gọi.

+1

Thực ra, có một cơ sở như vậy, ExpandoObject. – Kaerber

1

Hai biggies tôi có thể nghĩ là gõ vịt và khả năng sử dụng C# làm ngôn ngữ kịch bản trong ứng dụng, tương tự như javascript và Python. Cái cuối cùng làm tôi rách lên một chút.

0

Tôi thấy một số khung ORM động đang được viết. Hoặc heck viết một mình.

Tôi đồng ý với Jon Skeet, bạn có thể thấy một số cách thú vị để khám phá các đối tượng. Có thể với các bộ chọn như jQuery.

Gọi COM và gọi ngôn ngữ động.

Tôi rất mong được nhìn thấy nếu có cách để thực hiện một phương pháp missing_method giống Ruby.

1

Hãy nghĩ về nó như một hình thức phản chiếu đơn giản. Thay vì điều này:

object value = GetSomeObject(); 
Method method = value.GetType().GetMethod("DoSomething"); 
method.Invoke(value, new object[] { 1, 2, 3 }); 

Bạn có được điều này:

IDynamicObject value = GetSomeObject(); 
value.DoSomething(1, 2, 3); 
+0

quá xấu ví dụ không hoạt động. tôi muốn sử dụng nó trong một khóa học mà tôi đang dạy –

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