如何使用静态返回类型创建扩展方法?

时间:2010-09-20 22:20:09

标签: c# static extension-methods

我试图为Color静态类编写一个简单的扩展方法,它返回相当于该颜色的黑色和白色。
问题是扩展方法无法返回静态类型...
那么,我该怎么做?!请帮我。

5 个答案:

答案 0 :(得分:8)

问题是NO方法可以返回静态类型。静态类是无状态的(或只有静态状态),因此只有一个“实例”可以从引用命名空间的任何代码全局访问。

你可以返回一个颜色;虽然Color类本身具有静态成员,但它本身并不是静态的,因此可以存在很多Color的实例。您还可以将扩展方法应用于颜色。如果这样做,那么你可以在非静态Color结构的一个静态成员上调用扩展方法:

public static class MyColorsExtensions
{

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

}

...

var greyFromBlue = Color.Blue.ToGreyScale();

答案 1 :(得分:4)

如果您指的是System.Drawing.Color - 它不是静态类......它是一个结构。您应该能够从方法返回它的实例。恰好Color结构包含代表specific colors的静态成员 - 例如:Color.BlackColor.White

如果您没有提及该类型,请发布失败代码的简短示例。

答案 2 :(得分:1)

很难理解你想说的是什么,但是如果你试图为静态类创建扩展方法,那是不可能的,因为扩展方法适用于类实例。

答案 3 :(得分:0)

这是你要找的吗?这是一个返回静态颜色结构的扩展方法。

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

答案 4 :(得分:-2)

试试这个

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