我第一次尝试创建扩展方法,但遇到了一些麻烦……也许你们可以帮忙:)
public static class Extentions
{
public static int myMethod(this MyClass c)
{
return 1;
}
}
然后当我执行“MyClass.myMethod”时,我得到 q 编译器错误,说该方法不存在......
这是为什么?
我第一次尝试创建扩展方法,但遇到了一些麻烦……也许你们可以帮忙:)
public static class Extentions
{
public static int myMethod(this MyClass c)
{
return 1;
}
}
然后当我执行“MyClass.myMethod”时,我得到 q 编译器错误,说该方法不存在......
这是为什么?
首先,您需要一个“使用”指令来包含包含您的类和扩展方法的命名空间。
第二 - 重新“MyClass.myMethod” - 扩展方法适用于实例,而不是静态 - 所以你需要:
MyClass foo = ...
int i = foo.myMethod(); // translates as: int i = Extentions.myMethod(foo);
最后——如果你想在内部 MyClass
(或子类)使用扩展方法,你需要一个显式的this
——即
int i = this.myMethod(); // translates as: int i = Extentions.myMethod(this);
这是少数几个重要的案例之一this
。
您是否包含定义扩展的名称空间?我以前就被那个烫伤了。
还有一种方法可以避免必须添加扩展名的命名空间,以便在该命名空间中定义扩展名。虽然这不是一个好习惯
您是否导入(using
开头的子句)哪个Extensions
类所在的名称空间?
using Myself.MyProduct.MyNamespace;