2012-11-30 5 views
10

私はC#のjavascriptのプロトタイププロパティに似たものをお持ちになりたいと思います。
アイデアは、あなたが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にメソッドをコピーすることができません

関連する問題