为什么我不能称之为扩展方法?

时间:2011-10-18 09:16:25

标签: c#

我有课:

class Program
{
    static void Main(string[] args)
    {

    }

    public static int SetFlag_Old(this int i, int flag, bool set = true)
    {
        return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i;

    }
}

当我把这段代码放到上面的main方法中时,我没有选择调用扩展方法,我无法找出原因...

int i = 0;
i.

即使我创建一个非静态方法并放置该代码,我似乎无法调用扩展方法。我错过了一些非常简单的东西吗?

4 个答案:

答案 0 :(得分:14)

扩展方法必须是静态类:

public static class IntExtensions 
{
    public static int SetFlag_Old(this int i, int flag, bool set = true)
    {
        return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i;
    }
}

http://msdn.microsoft.com/en-us/library/bb383977.aspx

答案 1 :(得分:1)

扩展方法必须在非泛型和静态类中定义。程序不是静态的。

请参阅Extension methods must be defined in a non-generic static class

答案 2 :(得分:0)

代码甚至不会编译。它会给出错误Extension method must be defined in a non-generic static class。您还需要多少信息?我会为你重写它:

必须在非通用静态类中定义扩展方法

我会补充说,您可以将Program课程static。考虑到它的“入口”方法(Main)是static我不知道他们为什么没有在代码模板中直接使用它。

答案 3 :(得分:0)

扩展方法所在的类必须是静态的。将静态修饰符添加到Program类。

相关问题