有关 DLR (.NET 4.0 beta 1) 的最佳信息来源是什么?
-
06-09-2019 - |
题
我目前正在深入研究 C# 第二版,并尝试实现“动态协议缓冲区” - 即在我现有的协议缓冲区库之上提供一定程度的动态支持。因此,我有一个 DlrMessage
类型源自 DynamicObject
. 。经过一番尝试后,我设法让它用很少的代码来响应简单的属性,但我想走得更远 - 并真正了解发生了什么。
到目前为止,我还没有找到任何关于 DLR 的好的解释 - 而且许多博客文章现在实际上已经过时了,因为(我相信)以前的 CTP 和 .NET 4.0 beta 1 之间的情况已经发生了变化。这 DynamicObject 的 MSDN 文档 目前是非常小的。
我最直接的查询是是否有一种简单的方式说:“使用反射来绑定我无法处理的任何呼叫,使用此特定对象。” (换句话说,我想增加现有的反射绑定,而不是自己做所有事情。
是否有我应该了解的明确且最新的文档来源?我知道撰写有关新技术的部分内容 是 探索,但我们将不胜感激:)
其他提示
我目前也在研究这个问题,目前还没有太多信息。我无法帮助您解答疑问,但以下是我找到的一些信息:
PDC 视频中有相当多的内容。
http://channel9.msdn.com/pdc2008/TL44/
http://channel9.msdn.com/pdc2008/TL10/
本文讨论 DLR 如何与 IronPython 配合使用:http://msdn.microsoft.com/en-us/magazine/cc163344.aspx
训练套件预览中的内容非常少,位于: http://www.microsoft.com/downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&displayLang=en
希望这可以帮助
亚历克斯
默认情况下DynamicObject会说:“退回到反思”如果你尝试*函数返回false。所以,你已经可以继承和属性/字段/方法添加到您的子类,都将通过反射来处理,如果动态路径没有做查找。
在深入去越多,你可能想看看IDynamicMetaObjectProvider。在这个较低的水平,你说回退到反射的方法是调用传入DynamicMetaObjetBinder回退*方法。这样将会使主叫语言提供的分辨率。然后,您可以返回AST或将其组合成whcih返回一个更大的AST。基本上后备*让你的通话语言会产生包括正确的错误的AST(例外,不确定的JS,等...)。
DynamicObject确实回退到反射的方式是,它实际上调用粘合剂的回退*方法的两倍。第一次就后退没有“errorSuggestion”参数。这得到任何错误或使用反射建造的AST。然后,它产生一个AST其是这样的:
if(TryGetMember("name", out value)) {
return value;
} else {
return resultOffallback;
}
然后,它需要该组合AST和实际手它在作为用于在第二回退粘合剂中的错误的建议。然后,粘合剂应该尊重这个errorSuggestion如果绑定不成功。但是,如果.NET构件存在,则errorSuggestion被丢弃和.NET结合优先。最后,如果语言不知道如果绑定成功(例如语言有一个“方法失踪”型功能),它可以在AST的再次结合瓦特/它的动态检查。因此,使用回退,你不仅可以说做的反射也可以选择动态或静态成员是否优先。