2012-11-30 21 views
10

Tôi muốn có một cái gì đó tương tự như tài sản nguyên mẫu của javascript trong C#.
Ý tưởng là để mở rộng một thể hiện của một lớp như bạn làm trong javascript.
Điều gần nhất tôi thấy là sử dụng ExpandoObject, nhưng bạn không thể khởi tạo nó với một đối tượng hiện có.
Một vấn đề khác là bạn có thể lấy lại đối tượng gốc từ ExpandoObject.Làm thế nào để mở rộng một đối tượng hiện có trong C# 4.0 bằng cách sử dụng động lực

Dưới đây là những gì tôi muốn làm

var originalObject = new Person(); 
originalObject.name = "Will"; 
var extendedObject = new ExpandoObject(); 
extendedObject.lastName = "Smith"; 

//do something 

originalObject = (Person) extendedObject; 
+1

Có vẻ như bạn muốn kết hợp các tham chiếu tĩnh và động. Bạn không thể làm điều đó. –

+0

https://weblog.west-wind.com/posts/2012/Feb/08/Creating-a-dynamic-extensible-C-Expando-Object liên quan –

Trả lời

17

Bạn phần nào có thể giải quyết vấn đề sử dụng một cái gì đó như:

public static class DynamicExtensions 
{ 
    public static dynamic ToDynamic(this object value) 
    { 
     IDictionary<string, object> expando = new ExpandoObject(); 

     foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType())) 
      expando.Add(property.Name, property.GetValue(value)); 

     return expando as ExpandoObject; 
    } 
} 

Nhưng bạn không thể sao chép các phương pháp để các ExpandoObject mới

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