Как я могу создать методы расширения со статическим типом возврата? - PullRequest
0 голосов
/ 21 сентября 2010

Я пытался написать простой метод расширения для Color статического класса, который возвращает черно-белый эквивалент этого цвета.
Проблема в том, что методы расширения не могут возвращать Статические типы...
Итак, как я могу это сделать ?!Помогите мне, пожалуйста.

Ответы [ 5 ]

8 голосов
/ 21 сентября 2010

Проблема в том, что никакой метод не может возвращать статический тип. Статические классы не имеют состояния (или имеют только статическое состояние) и, следовательно, имеют только один «экземпляр», который доступен глобально из любого кода, ссылающегося на пространство имен.

Вы можете вернуть цвет; Сам класс Color, хотя и имеет статические члены, не является статичным, и может существовать так много экземпляров Colors. Вы также можете применить метод расширения к цвету. Если вы сделаете это, то можете вызвать метод расширения для одного из статических членов нестатической структуры Color:

public static class MyColorsExtensions
{

   public static Color ToGreyScale(this Color theColor) { ... }

}

...

var greyFromBlue = Color.Blue.ToGreyScale();
4 голосов
/ 21 сентября 2010

Если вы ссылаетесь на System.Drawing.Color - это не статический класс ... это структура.Вы должны быть в состоянии вернуть его экземпляр из метода.Так уж получилось, что структура Color включает в себя статические элементы для представления specific colors - например: Color.Black и Color.White.

Если вы не ссылаетесь на этот тип, пожалуйста, опубликуйте короткийпример кода, который не работает.

1 голос
/ 21 сентября 2010

Трудно понять, что вы пытаетесь сказать, но если вы пытаетесь создать метод расширения для статического класса, это невозможно, потому что методы расширения предназначены для экземпляров класса.

0 голосов
/ 23 мая 2013

попробуйте

public static class Colores
{
public static Color Rojo = Color.FromArgb(0xE51600);
public static Color Azul = Color.FromArgb(0x004183);
public static Color Verde = Color.FromArgb(0x00865A);
public static Color Plata = Color.FromArgb(0xC4C5C7);
public static Color Gris = Color.FromArgb(0x58585A);
public static Color Cafe = Color.FromArgb(0x632600);
public static Color Negro = Color.Black;
}
0 голосов
/ 21 сентября 2010

Это то, что вы ищете?Это метод расширения, возвращающий статическую цветовую структуру.

public static class ColorExtensions
{
    private static Color MYCOLOR = Color.Black;
    public static Color BlackAndWhiteEquivalent(this Color obj)
    {
        // stubbed in - replace with logic for find actual
        // equivalent color given what obj is
        return MYCOLOR;
    }
}

и тест

    [Test]
    public void FindBlackAndWhiteColorEquivalent()
    {
        Color equivalentColor = Color.Black.BlackAndWhiteEquivalent();
    }
...