首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net 3.5 DLR DynamicObject帮助

.Net 3.5 DLR DynamicObject帮助
EN

Stack Overflow用户
提问于 2010-02-26 03:52:59
回答 1查看 2.4K关注 0票数 3

我一直在努力让一个简单的DynamicObject示例在.NET 3.5中工作。

使用DLR的最新版本,我还不能弄清楚.NET 3.5相当于以下内容:

代码语言:javascript
复制
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派生类,这样我就能够使用直接对象属性和存储在字典中的属性(使用相同的语义点样式表示法或访问方法)。目标是使DLR兼容对象用于DLR支持的语言,并在应用程序升级到.NET 4.0时提供与.NET 4.0dlr功能的未来兼容性。

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

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

请有人给我指出正确的方向,告诉我如何在.NET 3.5中使用DynamicObject并在运行时添加属性等,而不需要访问动态关键字。

参考文献:

Dynamically adding members to a dynamic object

http://tomlev2.wordpress.com/2009/10/08/c-4-0-implementing-a-custom-dynamic-object/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-26 04:28:30

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2337135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档