这是一个人为的例子:从派生类中调用C#基类扩展方法?
public static class MyExtensions
{
public static void MyMethod(this MyInterface obj, string txt)
{
}
}
interface MyInterface {}
public MyDerived : MyInterface
{
void DoStuff()
{
MyMethod("test"); // fails; compiler can't find MyMethod?
}
}
在上述我的例子中,我试图调用从我的派生类分配给接口的扩展方法。编译器在这里失败,并说MyMethod在当前上下文中不存在。我在我的CS文件中有所有适当的使用语句,所以我不确定发生了什么。
这样做了。谢谢。我假设'这个'。并不是必需的,因为我期望它可以像来自基类的其他常规函数一样工作。 – 2011-06-06 17:02:09
@Robert Dailey,扩展方法总是需要一些实例来调用它们,并且在这个实例中声明的类的上下文中是'this'。这只是一个小小的*不便之处*,它不能与您从中获得的所有好处进行比较:-) – 2011-06-06 17:07:27
错误的扩展方法不需要实例来运行它们,因为它们是静态方法。您可以通过传递参数来将扩展方法调用为静态方法。但是,对于在扩展方法声明中标记为“this”的参数,“base”不是有效的参数值。 – Tengiz 2012-11-05 16:45:38