如何调用Extension方法ExtTest?
实例方法始终优先于扩展方法 - 编译器仅在其他所有方法都失败后检查扩展方法.
在这种情况下,最简单的方法是使用类型的变量WebServiceSender
:
WebServiceSender d = new ChildWebServiceSender(); d.ExtTest("abc"); // This will call the extension method
执行时类型d
无关紧要 - 只有编译时类型.
如果您还需要调用方法ChildWebServiceSender
,则可以使用两个引用同一对象的变量:
ChildWebServiceSender child = new ChildWebServiceSender(); WebServiceSender baseRef = child; child.ExtTest("abc"); // This will call the child instance method baseRef.ExtTest("abc"); // This will call the extension method
(当然,您可以使用强制转换 - 我认为这将更清楚地阅读.主要的一点是您希望类型的表达式WebServiceSender
作为方法调用的目标.)
或者您可以将该方法称为常规静态方法:
// TODO: Rename "util" to follow .NET naming conventions util.ExtTest(d, "abc");
或者,更好的是,您可以重命名扩展方法或实例方法,以便它们不会发生冲突 - 这将使读取您尝试调用的代码的任何人都更清楚.