Методы расширения для расширения членов класса? - PullRequest
1 голос
/ 14 августа 2010

Я хотел бы написать метод расширения, который расширяет некоторый член моего класса. В частности, я хотел бы расширить перечисление. Однако это не работает:

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 ]

5 голосов
/ 14 августа 2010

Вы можете писать методы расширения только в классах верхнего уровня, статических, неуниверсальных классах, но они могут расширять вложенные классы. Вот полный пример, основанный на вашем коде:

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());
    }
}
2 голосов
/ 14 августа 2010

Метод расширения должен быть определен в статическом классе.

См. Руководство .

edit

КакДжон указал, что статический класс должен быть верхнего уровня, а не вложенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...