【发布时间】:2014-03-22 03:46:06
【问题描述】:
我读到了dynamic 及其对语言的贡献。 DLR 管理对对象成员 (dynamic) 的任何调用,为此它使用反射机制。但我无法理解 DynamicObject 类型(内部)的行为。
当您从 DynamicObject 继承时,您可能会创建类似于现有 ExpandoObject 的东西,您需要覆盖 TrySetMember、 TryGetMember 等方法。我的问题是:当你做 object.method 时,它是如何传递给我们类的 TryGetMember 的,乍一看似乎是 DynamicObject绑定到 DLR,但我对此表示怀疑。
【问题讨论】:
-
您是否尝试过阅读描述动态对象的书籍或论坛?或者至少你问过谷歌同样的问题?
-
@OleksandrPshenychnyy 我用谷歌搜索,但所有结果都与功能有关,我正在寻找背后的东西。我有红色的书籍和材料都解释了功能,但没有提及内部实现。
-
我在 Jeffrey Richter 的书“CLR via C#”中读到了它。要解释的内容确实很多,我不确定我是否记得所有内容 - 你最好也阅读一下。简而言之,它编译了您使用“If”语句检查动态对象 .GetType() 结果编写的代码的几个版本。如果无法预测类型,则使用反射。
-
@OleksandrPshenychnyy 谢谢我会找到那本书。我到了使用反射的部分,但这并不能证明如果我执行 object.method 会在调用 TryInvokeMember 时透明地转换。一种解释可能是指示 DLR 在查找某些不存在的方法时任意调用此方法。最后一个是真还是假是我正在寻找的答案。