2010-04-01 65 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