将扩展名添加到颜色
本文关键字:颜色 添加 扩展名 | 更新日期: 2023-09-27 18:32:18
我想为Color
结构添加扩展
我的代码 :
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();
谢谢
"by command"?好吧,如果您的意思是您可以简单地向Color
添加一个静态方法,那么答案是"根本不",因为您的所有(扩展)方法都属于用户定义的类而不是现有的类。因此,在创建扩展方法时,您实际要做的是在任何自定义程序集中创建一个静态方法,该方法需要扩展类的instance
(这就是为什么签名中有this
的原因)。所以对this.BackColor = this.BackColor.myExt();
的调用等同于this.BackColor = MyColourExtensions.myExt(this.BackColor);
但是,类Color
本身不会以任何方式被扩展方法修改。所以你想要实现的不能简单地完成。即使可以将静态方法添加到现有类中,您的代码也不起作用,因为您仍然需要由方法签名指示的Color
实例。
您可以做的是从签名中省略 this-关键字,并从静态类调用该方法,因为MyColourExtensions.myExt()
根本不需要参数。
你不能这样使用它,因为"扩展方法是一种特殊的静态方法,但它们的调用就好像它们是扩展类型的实例方法一样。源
您可以像这样使用它:
this.BackColor = new Color().myExt();