gpt4 book ai didi

c# - .Net 3.5 DLR DynamicObject 帮助

转载 作者:行者123 更新时间:2023-11-30 17:23:08 26 4
gpt4 key购买 nike

我一直在努力获得一个在 .NET 3.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 派生类,这样我就可以使用直接对象属性和存储在字典中的属性,使用相同的语义点样式表示法或访问方法。目标是让 DLR 兼容对象在 DLR 支持的语言中使用,并在应用程序可以升级到 .NET 4.0 时提供与 .NET 4.0 DLR 功能的 future 兼容性。

我的问题是 .NET 4.0 之前的版本我没有与 dynamic 关键字等效的概念。 TryGetMember 等方法具有 GetMemberBinder 等 Binder 参数。现在 .NET 4.0 有一个可用的 C# 默认绑定(bind)程序,它允许在使用动态关键字时进行绑定(bind),但是我一直无法找到或确定如何在 .NET 3.5 中执行等效操作。

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

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

引用资料:
Dynamically adding members to a dynamic object
http://tomlev2.wordpress.com/2009/10/08/c-4-0-implementing-a-custom-dynamic-object/

最佳答案

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

您可以使用外层中的 DefaultBinder 来完成大部分工作 - 您只需创建一个,然后在其上使用类似 GetMember 的方法来进行绑定(bind)。然后, Binder 的实现仅使用 DefaultBinder 并对返回的装箱值类型应用任何规则(DLR 要求所有返回类型都是对象)。

关于c# - .Net 3.5 DLR DynamicObject 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com