簡體   English   中英

如何在C#中向現有類添加靜態擴展方法

[英]How can I add static Extention method to a existing class in C#

例如,我可以使用Color (類似的建築類)

Color c = Color.GreenSmile();

這是我的擴展方法,但是我不想使用實例。 有可能的?

   public static Color GreenSmile(this Color color)
        {
           return Color.FromArgb(83, 255, 26);
        }

不,您不能省略Color實例,因為擴展方法需要一個其類型作為第一個參數和this關鍵字擴展的實例。

我想要一個靜態方法,使用類的名稱。

可以在自己的名稱空間中創建一個新的類Color ,盡管這可能會引起混亂。

namespace Drawing.Utilities
{
    internal class Color
    {
        public static System.Drawing.Color GreenSmile()
        {
            return System.Drawing.Color.FromArgb(83, 255, 26);
        }
    }
}

現在,您可以使用此方法,因為它是System.Drawing.Color方法:

var greenSmile = Color.GreenSmile(); // add using Drawing.Utilities;

但是如上所述,這可能會引起混亂,尤其是因為該方法返回的Color類型與其自身不同。 因此,最好為此類使用其他名稱( ColorUtility )。

擴展方法不過是需要類實例的靜態方法。 但是,在您的情況下,您似乎根本沒有使用所提供的實例,因此您可以簡單地從method-signature中將其忽略,然后將其轉換為普通的靜態方法:

public static Color GreenSmile()
{
    return Color.FromArgb(83, 255, 26);
}

現在您可以這樣稱呼它:

Color c = MyClass.GreenSmile();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM