2010-09-20 45 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; 
}