首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#4.0:为什么在有ExpandoObject时有了MethodBag?

在 C# 4.0 中,引入了 ExpandoObject 类型,它允许在运行时动态地添加或删除属性和方法。然而,在引入 ExpandoObject 之前,C# 中的动态对象主要依赖于 IDynamicMetaObjectProvider 接口。这个接口提供了一个名为 GetMetaObject 的方法,该方法返回一个 DynamicMetaObject 实例,用于描述对象的动态行为。

DynamicMetaObject 类型包含一个名为 BindInvokeMember 的方法,该方法用于绑定成员调用。在 C# 4.0 之前,这个方法的实现方式是将所有可能的方法调用都存储在一个名为 MethodBag 的字典中。这个字典的键是方法名称,值是一个包含方法参数类型信息的对象数组。

然而,在引入 ExpandoObject 之后,C# 团队发现这种实现方式不够高效,因为它需要为每个方法调用创建一个新的 MethodInfo 对象。为了解决这个问题,C# 团队引入了一个新的类型 DynamicObject,它提供了一个名为 TryInvokeMember 的方法,用于处理成员调用。与 MethodBag 不同,DynamicObject 使用一个名为 DynamicMethod 的类型来表示动态方法调用,这个类型可以更高效地处理方法调用。

因此,尽管 MethodBag 在 C# 4.0 中已经被弃用,但它在 C# 的早期版本中曾经是一个重要的组成部分,用于支持动态方法调用。如果您需要在 C# 4.0 中使用动态方法调用,建议使用 DynamicObject 类型,因为它比 MethodBag 更高效、更灵活。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设。抄下了记忆更深刻

    C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设。抄下了记忆更深刻 本书面向的读者 写作本书时,我面临的一个挑战是如何持续吸引高级开发人员眼球的同时,不因使用assembly、link、chain、thread和fusion等字眼而打击初学者的信心,否则许多人会误以为这是一本讲冶金而不是程序设计的书,本书主要读者是已经有一定变成经验,并想多学一种语言“傍身”的开发者,但我还是忍住编排了本书的内容,以便使各种层次的开发者能够从中获益。 初学者;假如你是变成新手,本书将帮助你从入门程序

    03
    领券