2010-09-20 47 views
0

我正在尝试为Color静态类编写一个简单的扩展方法,它返回该颜色的黑白等价物。
问题是,扩展方法不能返回静态类型...
那么,我该怎么做?!请帮帮我。如何创建具有静态返回类型的扩展方法?

+0

所以,你想一个方法'颜色ToBlackOrWhite(这Colour彩色)''那里是Color'一个静态类?这是行不通的。不仅不能将静态类作为返回类型,而且也不能作为参数类型。因为它没有任何意义:如果您无法创建“Color”实例,如何将颜色传递给方法? – dtb 2010-09-20 22:23:51

回答

8

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

您可以返回一个Color; Color类本身(尽管它具有静态成员)不是静态的,并且可以存在很多颜色实例。您也可以将扩展方法应用于Color。如果你这样做,那么你就可以在非静态的色彩结构的静态成员之一调用扩展方法:

public static class MyColorsExtensions 
{ 

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

} 

... 

var greyFromBlue = Color.Blue.ToGreyScale(); 
4

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

如果您不是指那种类型,那么请发布一个失败代码的简短示例。

+0

只是要清楚,Color也可以用于任意ARGB值。 – Nathan 2010-09-20 22:33:01

0

很难明白你想说什么,但如果你想为静态类创建扩展方法,这是不可能的,因为扩展方法是针对类实例的。

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