引用自定义C#扩展方法的编译器错误

Ser*_*gio 5 c# extension-methods

我正在尝试第一次创建扩展方法,我遇到了一些麻烦...也许你们可以帮忙:)

public static class Extentions
    {
        public static int myMethod(this MyClass c)
        {
              return 1;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后,当我做"MyClass.myMethod"时,我得到q编译器错误,说该方法不存在...

这是为什么?

Mar*_*ell 19

首先,您需要一个"using"指令来包含包含具有扩展方法的类的命名空间.

第二 - 重新"MyClass.myMethod" - 扩展方法适用于实例,而不是静态 - 所以你需要:

MyClass foo = ...
int i = foo.myMethod(); // translates as: int i = Extentions.myMethod(foo);
Run Code Online (Sandbox Code Playgroud)

最后 - 如果你想在内部 MyClass(或子类)使用扩展方法,你需要一个显式this- 即

int i = this.myMethod(); // translates as: int i = Extentions.myMethod(this);
Run Code Online (Sandbox Code Playgroud)

这是少数几个重要的案例之一this.


Dan*_*ain 6

您是否包含定义扩展名的命名空间?我以前被烧过.

还有一种方法可以在你的扩展名中添加命名空间来定义该命名空间中的扩展名.但这不是一个好习惯


Mat*_*eid 5

您是否导入了(using在开头的子句)Extensions类所在的命名空间?

using Myself.MyProduct.MyNamespace;
Run Code Online (Sandbox Code Playgroud)