扩展类成员的扩展方法?

时间:2010-08-13 20:50:43

标签: c# visual-studio

我想写一个扩展方法,扩展我班级的一些成员。具体来说,我想扩展一个枚举。但是,这不起作用:

namespace mynamespace
{
    public class myclass
    {
        public enum ErrorCodes
        {
            Error1, Error2, Error3
        }

        public static double GetDouble(this ErrorCodes ErrorCode)
        {
            return (double)((int)ErrorCode);
        }

        public void myfunc()
        {
            ErrorCodes mycode;
            MessageBox.Show(mycode.GetDouble().ToString());
        }
    }
}

具体来说,它不会将GetDouble()识别为扩展名。这不仅仅适用于枚举,我尝试为双打创建扩展方法,也遇到了同样的问题。

2 个答案:

答案 0 :(得分:5)

您只能在顶级,静态,非泛型类中编写扩展方法,但它们可以扩展嵌套类。这是一个完整的示例,基于您的代码:

using System;

public static class Extensions
{
    public static double GetDouble(this Outer.ErrorCode code)
    {
        return (double)(int)code;
    }
}

public class Outer
{
    public enum ErrorCode
    {
        Error1, Error2, Error3
    }
}

public class Test
{
    public static void Main()
    {
        Outer.ErrorCode code = Outer.ErrorCode.Error1;
        Console.WriteLine(code.GetDouble());
    }
}

答案 1 :(得分:2)

扩展方法必须在静态类中定义。

请参阅manual

修改

正如Jon指出的那样,静态类必须是顶级的,而不是嵌套的。