我不使用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