c# - 扩展方法如何连接

标签 c# .net

我只是想知道扩展方法是如何连接到原始类的。我知道在 IL 代码中它调用了静态方法,但它是如何调用的以及为什么它不破坏封装。

最佳答案

他们不“ Hook ”。

Visaul Studio IDE 只是通过在 intellisense 列表中显示它们来让它看起来像它。

编译器“知道”如何处理引用,以便使用正确的参数进行正确的方法调用。

这就是syntactic sugar - 这些方法只是单独静态类上的静态方法。使用 this修饰符让编译器“知道”添加 ExtensionAttribute到类以将其标记为扩展方法。

由于扩展方法实际上更改类并且只能访问其上的公共(public)成员,因此保留了封装。

来自 MSDN :

Extension methods are a special kind of static method, but they are called as if they were instance methods on the extended type.

(强调我的)

关于c# - 扩展方法如何连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478918/

相关文章:

c# - 调用另一个 Web 服务的 Web 服务是否有任何冲突?

c# - 使用带有 C# 的 MediaTranscoder 将 PCM 音频转码为 MP3

c# - WeakReference 返回错误的对象

c# - 如何使用 BindingSource 在 DataGridView 中绑定(bind)导航属性(二级属性)?

c# - 在 C++ 中转换 COM 类型

.net - Delphi 7 中的 Soap 信封 header 不包括 utf-8 编码。我该如何修改它?

c# - 当 Windows XP 将屏幕淡化为灰色时如何通知我?

c# - 如何使用 .NET 将字符串附加到从 Blob 派生的 JSON 字符串?

c# - ObjectContext 正在泄漏分离实体的内存

.net - .NET 3.5 SP1 客户端框架的 HttpUtility 的替代方案?