2012-11-30 16 views
10

javascript'in C# türünde prototype özelliğine benzer bir şeye sahip olmak isterim.
Fikir, javascript'te yaptığınız gibi bir sınıf örneğini genişletmektir.
Bulduğum en yakın şey ExpandoObject kullanıyordu, ancak varolan bir nesne ile başlatamıyorsunuz.
Başka bir sorun da, orijinal nesneyi ExpandoObject öğesinden geri alabilmenizdir. İşte C# 4.0'da varolan bir nesneyi dinamikleri kullanarak genişletme

Ben

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

//do something 

originalObject = (Person) extendedObject; 
+1

Statik ve dinamik olarak yazılan referansları karıştırmak istediğiniz gibi geliyor. Bunu yapamazsın. –

+0

İlgili https://weblog.west-wind.com/posts/2012/Feb/08/Creating-a-dynamic-extensible-C-Expando-Object –

cevap

17

Sen kısmen gibi bir şey kullanarak sorunu çözebilir yapmak istediğim şey:

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; 
    } 
} 

Ama yeni ExpandoObject için yöntemler kopyalamak mümkün değildir

İlgili konular