2012-11-30 71 views
10

我想在c#中使用類似javascript的prototype屬性。
這個想法是像在javascript中一樣擴展一個類的實例。
我發現的最接近的事情是使用ExpandoObject,但不能用現有對象初始化它。
另一個問題是您可以從ExpandoObject中取回原始對象。如何使用動態在c#4.0中擴展現有對象

這是我想要做的

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

//do something 

originalObject = (Person) extendedObject; 
+1

這聽起來像你想混合靜態和動態類型的引用。你不能那樣做。 –

+0

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

回答

17

您可以使用類似部分地解決這個問題:

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

但你不能將方法複製到新ExpandoObject

相關問題