Joa*_*nge 7 .net c# extension-methods
我为String编写了一个扩展方法来获取一个char参数string.Remove(char).但是当我使用它时,它改为调用默认string.Remove(int)方法.
实际方法的存在不应该比隐式转换具有更高的优先级吗?
实例方法优先于扩展方法.你的观察证明了同样的证据.
在解析要调用的方法时,它总是会在扩展方法上选择匹配的实例方法......这在某种程度上是直观的.
从C#中深入解释,
当编译器发现您正在尝试调用看起来像实例方法但无法找到的方法时,它会查找扩展方法(根据您的
using指令可见).在多个候选者作为目标扩展方法的情况下,具有类似于重载的"更好转换"的那个(例如,如果IChild和IBase都具有定义的类似扩展方法,则选择IChild.ExtensionMethod)
另外一个隐藏的代码破坏者可以说TypeA没有将SecretMethod作为Libv1.0中的实例方法.所以你写了一个扩展方法SecretMethod.如果作者在v2.0中引入了相同名称和签名的实例方法(没有this参数),并且使用最新的最好的Libv2.0 重新编译源代码,那么对扩展方法的所有现有调用现在都将默认路由到新的实例方法.
| 归档时间: |
|
| 查看次数: |
1331 次 |
| 最近记录: |