C# 为颜色添加扩展名
我想将扩展添加到C# 为颜色添加扩展名,c#,colors,C#,Colors,我想将扩展添加到Colorstruct 我的代码: public static Color myExt(this Color clr) { if (clr == Color.Black) clr = Color.White; else clr = Color.Black; return clr; } 我只能通过以下方式使用它: this.BackColor = this.BackColor.myExt(); 如何通过命令使用它: thi
Color
struct
我的代码:
public static Color myExt(this Color clr)
{
if (clr == Color.Black)
clr = Color.White;
else
clr = Color.Black;
return clr;
}
我只能通过以下方式使用它:
this.BackColor = this.BackColor.myExt();
如何通过命令使用它:
this.BackColor = Color.myExt();
谢谢,“凭命令”?好吧,如果你的意思是你可以简单地在Color
中添加一个静态方法,那么答案是“一点也不”,因为你所有的(扩展)方法都属于一个用户定义的类,而不是现有的类。因此,在创建扩展方法时,您实际要做的是在任何自定义程序集中创建一个静态方法,该自定义程序集中需要扩展类的实例
(这就是为什么签名中有this
)。因此对this.BackColor=this.BackColor.myExt()的调用
相当于this.BackColor=myclourextensions.myExt(this.BackColor)代码>
但是,类Color
本身不会被扩展方法以任何方式修改。因此,你想要实现的目标是无法实现的。即使可以将静态方法添加到现有类中,您的代码也无法工作,因为您仍然需要方法签名指定的Color
实例
您可以做的是从签名中省略this关键字,并从静态类中调用该方法,名为myolourextensions.myExt()
,不需要任何参数。您不能这样使用它,因为扩展方法是一种特殊的静态方法,但它们被调用时,就好像它们是扩展类型上的实例方法一样
您可以这样使用它:
this.BackColor = new Color().myExt();
您可以将其称为YourExtensionMethodClassName.myExt(yourColor);
因此,这意味着我不能像这样使用它:this.BackColor=Color.myExt()
:(?是的。但是你为什么要这样做?你的方法显然需要一个Color
的实例才能工作,而你出于任何原因都不想提供该实例。我只是问这个问题,看看我为什么不能使用它……谢谢你的回答