Ode*_*ded 16
他们没有"勾结".
Visaul Studio IDE只是通过在intellisense列表中显示它们来使它看起来像它.
编译器"知道"如何处理引用,以便使用正确的参数进行正确的方法调用.
这只是语法糖 - 这些方法只是一个单独的静态类上的静态方法.使用this修饰符可让编译器"知道"将ExtensionAttribute类添加到类中以将其标记为扩展方法.
由于扩展方法实际上不会更改类并且只能访问其上的公共成员,因此保留了封装.
来自MSDN:
扩展方法是一种特殊的静态方法,但他们被称为好像他们是在扩展类型实例的方法.
(强调我的)
通过将this关键字放在静态方法的第一个参数前面来指定扩展方法:
public static void SomeExtension(this string s)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这只是用System.Runtime.CompilerServices.ExtensionAttribute修饰方法的语法糖:
[Extension]
public static void SomeExtension(string s)
{
...
}
Run Code Online (Sandbox Code Playgroud)
当编译器看到该属性时,它知道将扩展方法调用转换为适当的静态方法调用,并将该实例作为第一个参数传递.
由于调用只是普通的静态方法调用,因此没有机会破坏封装; 与所有静态方法一样,这些方法只能访问扩展类型的公共接口.
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |