如何将静态扩展方法添加到 C# 中的现有 class
How can I add static Extention method to a existing class in C#
例如,我可以使用Color
(建筑物class那样)
Color c = Color.GreenSmile();
这是我的扩展方法,但我不想使用实例。有可能吗?
public static Color GreenSmile(this Color color)
{
return Color.FromArgb(83, 255, 26);
}
扩展方法只不过是一种静态方法,需要您的 class 的一个实例。但是在你的情况下,你似乎根本没有使用提供的实例,所以你可以简单地从方法签名中省略它并将它变成一个普通的静态方法:
public static Color GreenSmile()
{
return Color.FromArgb(83, 255, 26);
}
现在你可以这样称呼它了:
Color c = MyClass.GreenSmile();
不,您不能省略 Color
实例,因为扩展方法需要它扩展的类型的实例作为第一个参数和 this
关键字。
I want a static method, to use the name of the class.
您可以在它自己的命名空间中创建一个新的classColor
,尽管这可能会造成混淆。
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;
但是如上所述,这可能会引起混淆,尤其是因为方法 returns 与自身的 Color
类型不同。所以这个class(ColorUtility
).
用不同的名字当然更好
例如,我可以使用Color
(建筑物class那样)
Color c = Color.GreenSmile();
这是我的扩展方法,但我不想使用实例。有可能吗?
public static Color GreenSmile(this Color color)
{
return Color.FromArgb(83, 255, 26);
}
扩展方法只不过是一种静态方法,需要您的 class 的一个实例。但是在你的情况下,你似乎根本没有使用提供的实例,所以你可以简单地从方法签名中省略它并将它变成一个普通的静态方法:
public static Color GreenSmile()
{
return Color.FromArgb(83, 255, 26);
}
现在你可以这样称呼它了:
Color c = MyClass.GreenSmile();
不,您不能省略 Color
实例,因为扩展方法需要它扩展的类型的实例作为第一个参数和 this
关键字。
I want a static method, to use the name of the class.
您可以在它自己的命名空间中创建一个新的classColor
,尽管这可能会造成混淆。
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;
但是如上所述,这可能会引起混淆,尤其是因为方法 returns 与自身的 Color
类型不同。所以这个class(ColorUtility
).