Tôi đang cố gắng tìm hiểu tất cả các tính năng mới đi kèm với C# 4.0. Tôi không hiểu sự khác biệt giữa các loại DynamicObject
và ExpandoObject
. Có vẻ như DynamicObject
được sử dụng, ví dụ: khi bạn muốn truy cập các biến từ các kịch bản Python và ExpandoObject
khi nói chuyện với các đối tượng COM/Office. Tôi có đúng không? Sự khác biệt trong việc sử dụng chúng là gì?C# 4.0 Động vs Expando ... chúng phù hợp ở đâu?
Trả lời
Expando làdynamic
loại thành viên nào có thể được thêm vào (hoặc bị xóa) khi chạy. dynamic
được thiết kế để cho phép .NET tương thích với các loại khi giao tiếp với các ngôn ngữ nhập động như Python và JavaScript.
Vì vậy, nếu bạn cần phải xử lý một loại động: sử dụng dynamic
và nếu bạn cần để xử lý dữ liệu động như XML hoặc JSON: sử dụng ExpandoObject
Việc kê khai của một expando cho thấy mối quan hệ giữa năng động và expando :
dynamic expando = new ExpandoObject();
Và khả năng thêm một tài sản mới:
expando.SomeNewStringVal = "Hello World!";
Đó là dòng cuối cùng của mã tạo ra một thương hiệu chuỗi mới pro perty trong đối tượng expando được gọi là SomeNewStringVal
. Kiểu chuỗi được suy ra từ bài tập.
Vì vậy, expando là loại dữ liệu động có thể đại diện cho dữ liệu thay đổi động. Đó là nó trong một nutshell. Here's a deeper look at dynamic and expando.
Hoàn dụ:
using System;
using System.Dynamic;
class Program
{
static void Main(string[] args)
{
dynamic expando = new ExpandoObject();
expando.SomeNewStringVal = "Hello Brave New Whirrled!";
Console.WriteLine(expando.SomeNewStringVal);
// more expando coolness/weirdness:
var p = expando as IDictionary<String, object>;
p["A"] = "New val 1";
p["B"] = "New val 2";
Console.WriteLine(expando.A);
Console.WriteLine(expando.B);
}
}
Mặc dù ông đã chấp nhận nó, tôi nghĩ rằng OP có nghĩa là sự khác biệt giữa DynamicObject và ExpandoObject. – nawfal
Chỉ cần lưu ý điều này không có ích vào thời gian trong thế giới thực. Tôi chỉ sử dụng nó ra API để tạo ra các đối tượng phản ứng dyanmic trước khi tuần tự hóa thành xml hoặc json. Bằng cách này tôi có thể đệ quy thêm các lớp con với các tên thuộc tính riêng biệt mà không cần phải định nghĩa một tấn các thuộc tính rõ ràng. "GroupsL1": [{"GroupingL2 :: [{... – user2326106
[' DynamicObject'] (https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.dynamicobject?view=netframework- 4.7) MSDN: * Cung cấp một lớp cơ sở để xác định hành vi động tại thời gian chạy, lớp này phải được kế thừa từ, bạn không thể khởi tạo nó trực tiếp. * Trang MSDN chứa một triển khai 'ExpandoObject' đơn giản dựa trên' DynamicObject' Vì vậy, cả hai loại được sử dụng với ràng buộc trễ, nhưng 'ExpandoObject' là bê tông (và được đóng dấu), trong khi' DynamicObject' chỉ là một lớp cơ sở cho các đối tượng động tùy chỉnh. – Palec
- 1. Hành động ExtJS ở đâu phù hợp với mẫu MVC
- 2. Tính toán trình đổ bóng, chúng phù hợp với đường ống ở đâu?
- 3. C# FindAll VS Tốc độ ở đâu
- 4. C# sâu/lồng nhau/đệ quy hợp nhất các đối tượng động/expando
- 5. Dịch vụ Web ASP.NET ở đâu trong .Net Framework 4.0?
- 6. Khởi động ở đâu?
- 7. Erlang vs OCaml (thích hợp nhất để phù hợp)
- 8. Từ khóa tự động C được sử dụng ở đâu?
- 9. Mysql ở đâu ... Trong ... VÀ nơi ... trong ... nên chỉ phù hợp trên cùng một chỉ số
- 10. OpenCV và Computer Vision, chúng ta đang đứng ở đâu?
- 11. Bản dịch ngôn ngữ phù hợp với mẫu MVC ở đâu?
- 12. Enum của Java ... Chúng được tạo ra ở đâu?
- 13. Macro Scala, chúng được sử dụng ở đâu?
- 14. phù hợp với linux? Thực hiện vs vs cmake vs codeblocks vs qmake
- 15. TÙY CHỌN THIẾT LẬP .... chúng được lưu trữ ở đâu
- 16. Mẫu phù hợp với Seq ở Haskell
- 17. Khó khăn về phương pháp trong C# 4.0: động vs RealProxy
- 18. Đối tượng expando Javascript
- 19. C# 4.0: truyền động sang tĩnh
- 20. Hợp đồng mã Vs. Đối tượng khởi tạo (.net 4.0)
- 21. Mẫu jQuery - tôi nên đặt chúng ở đâu?
- 22. Ở đâu/khi nào chúng tôi sử dụng JSON?
- 23. Các loại phù hợp với tay cầm ở giao diện C
- 24. Mathematica: NExpectation vs Expectation - kết quả không phù hợp
- 25. Phương thức khởi động của Dịch vụ WCF ở đâu?
- 26. VS 2010 Debugging - Trình hiển thị ở đâu
- 27. bản ghi hoạt động của người ký mã đang ở đâu, hoặc ở đâu?
- 28. AVLayerVideoGravityResizeAspectFill crop ở đâu
- 29. JSF setLocale không hoạt động phù hợp
- 30. Căn chỉnh văn bản phù hợp nhưng ở bên phải?
câu trả lời tốt hơn ở đây: http://stackoverflow.com/questions/3565481/differences-between-expandoobject-dynamicobject-and-dynamic –