当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《引用自定义C#扩展方法的编译器错误》经验,为你挑选了3个好方法。

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

public static class Extentions
    {
        public static int myMethod(this MyClass c)
        {
              return 1;
        }
    }

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

这是为什么?



1> Marc Gravell..:

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

第二 - 重新"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.



2> Dan McClain..:

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

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



3> Matthias Mei..:

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

using Myself.MyProduct.MyNamespace;

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有