C# Can';无法访问另一个文件中的扩展名方法
我在C# Can';无法访问另一个文件中的扩展名方法,c#,.net,winforms,extension-methods,C#,.net,Winforms,Extension Methods,我在Extensions.cs文件中有这个名称空间: namespace TextBoxExtensions { public static class TextBoxExtensionsClass { public static void ResetColor(this Label label) { label.ForeColor = new TextBox().ForeColor; } } }
Extensions.cs
文件中有这个名称空间:
namespace TextBoxExtensions
{
public static class TextBoxExtensionsClass
{
public static void ResetColor(this Label label)
{
label.ForeColor = new TextBox().ForeColor;
}
}
}
然后:
//
textbox.ResetColor();
当我尝试在另一个文件中访问它时,会出现以下错误:
“System.Windows.Forms.TextBox”不包含“ResetColor”的定义,并且最佳扩展方法重载“TextBoxExtensions.TextBoxExtensionsClass.ResetColor(System.Windows.Forms.Label)”具有一些无效参数
什么类型的文本框是
textbox
?扩展名用于标签
对象。我猜这是你的问题。。。。您的文本框
对象不是Label类型您已经为Label
类定义了扩展方法。然后,您试图在文本框上使用它,由于明显的原因,这将不起作用(这两个类彼此没有关系)。问题是,您已经为标签
类型定义了扩展方法,但试图调用文本框的实例 请尝试此操作,这将允许您将其用于任何类型的控件:
public static void ResetColor<T>(this T control) where T : Control, new()
{
control.ForeColor = new T().ForeColor;
}
publicstaticvoidresetcolor(这个T控件),其中T:control,new()
{
control.ForeColor=新的T().ForeColor;
}
您的扩展方法扩展了标签
类,而不是文本框
类。如果仔细观察,您会发现编译错误告诉您问题出在哪里-参数的类型不匹配。
public static void ResetColor<T>(this T control) where T : Control, new()
{
control.ForeColor = new T().ForeColor;
}