0

我读到了dynamic它对语言的贡献。DLR 管理对对象 ( ) 成员的任何调用dynamic,为此它使用反射机制。但我无法理解DynamicObject类型的行为(内部)。

当您从DynamicObject继承时,您可能会创建类似于现有ExpandoObject的东西,您需要覆盖TrySetMemberTryGetMember和其他方法。我的问题是:当你做object.method时,它是如何传递给我们类的TryGetMember的,乍一看似乎DynamicObject是绑定到 DLR 的,但我对此表示怀疑。

4

1 回答 1

1

评论中已澄清问题的答案。

虽然我不确定,但我认为 TryInvokeMember 等函数只是对反射进行包装,以克服反射的基本设计问题——它只抛出一种类型的异常:TargetInvocationException。所有其他异常,包括您正在调用的方法中的您自己的异常,都使用 TargetInvocationException 进行包装。

动态变量没有这个问题——它们抛出与最初抛出的完全相同的 excaption。虽然在某些情况下它们仍然在内部使用反射,但它们应该解开底层异常。我认为这是 TryInvokeMember 和相关方法的目的。它还使 CLR 的开发人员能够以更适当和特殊的方式处理不存在成员的调用。

于 2013-04-10T16:36:59.230 回答