如何在C#中向现有类添加静态扩展方法

时间:2018-11-27 09:20:49

标签: c# extension-methods

例如,我可以使用Color(这样的建筑类)

Color c = Color.GreenSmile();

这是我的扩展方法,但是我不想使用实例。有可能吗?

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

2 个答案:

答案 0 :(得分:4)

不,您不能省略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)。

答案 1 :(得分:0)

扩展方法不过是一个静态方法,可以期望类的实例。但是,在您的情况下,您似乎根本不使用提供的实例,因此您可以简单地从method-signature中忽略它,并将其变成普通的静态方法:

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

现在您可以这样称呼它:

Color c = MyClass.GreenSmile();
相关问题