Я изо всех сил пытался получить простой пример DynamicObject, работающий в .NET 3.5.
Используя последнюю версию 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, и обеспечить будущую совместимость с возможностями DLR .NET 4.0, когда приложение можно будет обновить до .NET 4.0.
Моя проблема в том, что до .NET 4.0 у меня нет эквивалента концепции динамического ключевого слова. Такие методы, как TryGetMember, имеют параметр связывания, такой как GetMemberBinder. В настоящее время в .NET 4.0 доступно связывание по умолчанию на C #, что позволит связывать его при использовании ключевого слова dynamic, однако мне не удалось найти или определить, как выполнить аналог в .NET 3.5.
На данный момент я понимаю, что мне нужно написать собственный механизм связывания, который бы в основном дублировал тип логики, доступный в связывателе C # по умолчанию для .NET 4.0.
Пожалуйста, кто-нибудь указывает мне правильное направление, как я могу использовать DynamicObject в .NET 3.5 и добавлять свойства и т. Д. Во время выполнения без доступа к динамическому ключевому слову.
Ссылки:
Динамическое добавление членов к динамическому объекту
http://tomlev2.wordpress.com/2009/10/08/c-4-0-implementing-a-custom-dynamic-object/