c# DynamicObject内部是如何工作的

本文关键字:工作 何工作 DynamicObject 内部 | 更新日期: 2023-09-27 18:08:34

我读了dynamic及其对语言的贡献。DLR管理对对象(dynamic)成员的任何调用,为此它使用反射机制。但是我不能理解 dynamicobject type(内部)的行为。

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

c# DynamicObject内部是如何工作的

评论中澄清问题的答案。

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

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