将扩展名添加到颜色

本文关键字:颜色 添加 扩展名 | 更新日期: 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();