2010-04-01 34 views

回答

4

我不使用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应该以同样的方式对待它!

+0

起初,当我看到你的答案时,我就像是“呃”。我尝试过这个。玩过它。这很酷。有一个upvote! – Amy 2010-04-02 01:14:27

+0

@ yodaj007:很高兴它的工作(这也表明DLR按预期工作,这是很好的知道)! – 2010-04-02 02:38:52