Как я могу создать методы расширения со статическим типом возврата?

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

 dtb21 сент. 2010 г., 00:23
Итак, вы хотите методColor ToBlackOrWhite(this Color color) гдеColor такое статический класс? Это не сработает. Мало того, что вы не можете иметь статический класс в качестве возвращаемого типа, но также не как тип параметра. Потому что это не имеет никакого смысла: как бы вы передали цвет методу, если не можете создавать экземплярыColor?

Ответы на вопрос(5)

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

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

 Nathan21 сент. 2010 г., 00:33
просто чтобы быть понятным, Color также может использоваться с произвольными значениями ARGB.
Решение Вопроса

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

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

public static class MyColorsExtensions
{

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

}

...

var greyFromBlue = Color.Blue.ToGreyScale();

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

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();
    }

попробуй это

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;
}

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

Ваш ответ на вопрос