我不使用IronPython,所以我可能是完全错误的,但这里是我所想的。
鉴于动态语言运行时现已完全集成在.NET 4.0中,并且IronPython基于DLR,因此您应该能够使用标准.NET方法创建处理设置/获取不存在成员/属性的对象/属性。这可以通过执行IDynamicMetaObjectProvider
接口来完成。一个更简单的方法是从DynamicObject
继承,它提供了默认实现大部分的方法和只添加你需要的方法(见members of DynamicObject):
class MyObject : DynamicObject {
public override bool TryGetMember
(GetMemberBinder binder, out object result) {
string name = binder.Name;
// set the 'result' parameter to the result of the call
return // true to pretend that attribute called 'name' exists
}
public override bool TrySetMember
(SetMemberBinder binder, object value) {
// similar to 'TryGetMember'
}
}
在C#中,你可以使用这个对象感谢dynamic
。 IronPython应该以同样的方式对待它!
起初,当我看到你的答案时,我就像是“呃”。我尝试过这个。玩过它。这很酷。有一个upvote! – Amy 2010-04-02 01:14:27
@ yodaj007:很高兴它的工作(这也表明DLR按预期工作,这是很好的知道)! – 2010-04-02 02:38:52