Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为颜色添加扩展名_C#_Colors - Fatal编程技术网

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
的实例才能工作,而你出于任何原因都不想提供该实例。我只是问这个问题,看看我为什么不能使用它……谢谢你的回答