c#-4.0 – 如何使用动态扩展c#4.0中的现有对象

我想在c#中有类似于 javascript的prototype属性.
这个想法是在javascript中扩展一个类的实例.
我发现最接近的是使用ExpandoObject,但是您无法使用现有对象初始化它.另一个问题是您可以从ExpandoObject获取原始对象.

这是我想做的

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

//do something

originalObject = (Person) extendedobject;

解决方法

您可以使用以下方法部分解决问题:
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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...