首页 > 解决方案 > 如何将静态扩展方法添加到 C# 中的现有类

问题描述

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

Color c = Color.GreenSmile();

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

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

标签: c#extension-methods

解决方案


不,您不能省略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-type 与其自身不同。所以为这个类(ColorUtility)使用不同的名字当然更好。


推荐阅读