繁体   English   中英

C#DynamicObject在内部如何工作?

[英]How does C# DynamicObject internally work?

我了解了dynamic及其对语言的贡献。 DLR通过使用反射机制来管理对对象成员的任何调用( dynamic )。 但是我不了解DyamicObject类型的行为(内部)。

DynamicObject继承时,可以创建类似于现有ExpandoObject的内容 ,您需要覆盖TrySetMemberTryGetMember和其他方法。 我的问题是:当您执行object.method时 ,这是如何传递给我们类的TryGetMember的,乍一看似乎DynamicObject已绑定到DLR,但我对此表示怀疑。

注释中已澄清问题的答案。

虽然我不确定,但我想TryInvokeMember等函数只是对反射进行包装以克服反射的基本设计问题-它仅引发一种类型的异常:TargetInvocationException。 所有其他异常(包括您自己正在调用的方法中的异常)都与TargetInvocationException一起包装。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM