我一直在努力获得一个在 .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 功能的未来兼容性。
我的问题是 pre-.NET 4.0 我没有与 dynamic 关键字等效的概念。TryGetMember 等方法具有类似 GetMemberBinder 的 binder 参数。现在 .NET 4.0 有一个可用的 C# 默认绑定器,它允许在使用 dynamic 关键字时进行绑定,但是我无法找到或确定如何在 .NET 3.5 中执行等效操作。
目前,我的理解是我需要编写一个自定义绑定器,它基本上会复制 .NET 4.0 默认 C# 绑定器中可用的逻辑类型。
请有人指出我如何在 .NET 3.5 中使用 DynamicObject 并在运行时添加属性等而不访问 dynamic 关键字的正确方向。
参考:
动态添加成员到动态对象
http://tomlev2.wordpress.com/2009/10/08/c-4-0-implementing-a-custom-dynamic-object/