Как расширить существующий объект в С# 4.0, используя динамику
Я хотел бы иметь что-то похожее на свойство prototype javascript в c #.
Идея состоит в том, чтобы расширить экземпляр класса, как вы делаете в javascript.
Самым близким, что я нашел, было использование ExpandoObject, но вы не можете инициализировать его с существующим объектом.
Другая проблема заключается в том, что вы можете получить исходный объект из ExpandoObject.
Вот что я хочу сделать:
var originalObject = new Person();
originalObject.name = "Will";
var extendedObject = new ExpandoObject();
extendedObject.lastName = "Smith";
//do something
originalObject = (Person) extendedObject;
Ответы
Ответ 1
Вы можете частично решить проблему, используя что-то вроде:
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