C# .Net 3.5 DLR DynamicObject帮助

C# .Net 3.5 DLR DynamicObject帮助,c#,.net,.net-3.5,dynamic,dynamic-language-runtime,C#,.net,.net 3.5,Dynamic,Dynamic Language Runtime,我一直在努力获得一个在.NET3.5中工作的简单DynamicObject示例 使用DLR off codeplex的最新版本,我无法理解.NET 3.5与以下内容的等效性: public class DynamicObjectBag : DynamicObject { private Dictionary<string, object> _properties = new Dictionary<string, object>(); public over

我一直在努力获得一个在.NET3.5中工作的简单DynamicObject示例

使用DLR off codeplex的最新版本,我无法理解.NET 3.5与以下内容的等效性:

public class DynamicObjectBag : DynamicObject
{
    private Dictionary<string, object> _properties = new Dictionary<string, object>();
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        return _properties.TryGetValue(binder.Name, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        _properties[binder.Name] = value;
        return true;
    }
}

dynamic foo = new DynamicObjectBag();
foo.Val1 = 3;
foo.Val2 = “Value 2”;
公共类DynamicObject包:DynamicObject
{
私有字典_properties=新字典();
公共重写bool TryGetMember(GetMemberBinder绑定器,输出对象结果)
{
返回_properties.TryGetValue(binder.Name,out结果);
}
public override bool TrySetMember(SetMemberBinder绑定器,对象值)
{
_属性[binder.Name]=值;
返回true;
}
}
dynamic foo=新的DynamicObjectBag();
foo.Val1=3;
foo.Val2=“值2”;
这当然是一个简化的例子。我计划从DynamicObject派生类,以便能够使用直接对象属性和字典中存储的属性,使用相同的语义点样式表示法或访问方法。目标是使DLR兼容对象能够在支持DLR的语言中使用,并在应用程序升级到.NET 4.0时提供与.NET 4.0 DLR功能的未来兼容性

我的问题是,在.NET4.0之前,我没有与dynamic关键字等效的概念。TryGetMember等方法有一个绑定器参数,如GetMemberBinder。现在.NET4.0有一个C#默认绑定器可用,它允许在使用dynamic关键字时进行绑定,但是我无法找到或确定如何在.NET3.5中执行等效的绑定

目前我的理解是,我需要编写一个自定义绑定器,它基本上复制了.NET4.0默认C#binder中可用的逻辑类型

请有人给我指出正确的方向,告诉我如何在运行时使用.NET3.5中的DynamicObject并添加属性等,而无需访问dynamic关键字

参考文献:


您将需要创建一个自定义绑定,然后您可能希望使用CallSite使用该绑定,以便缓存操作


您可以在外层使用DefaultBinder来完成大部分工作—您只需要创建一个,然后它就有了像GetMember这样的方法来完成绑定。然后,绑定器的实现就是使用DefaultBinder,并为返回的装箱值类型应用任何规则(DLR要求所有返回类型都是object)。

这是我目前的想法。我希望有一些我错过的秘密忍者动作,这样我就不必编写自定义绑定器和调用站点,因为这种行为在.NET4.0中是可用的。