2012-01-05 87 views
0

我有这个命名空间中Extensions.cs文件:无法访问我exension方法

namespace TextBoxExtensions 
{ 
    public static class TextBoxExtensionsClass 
    { 
     public static void ResetColor(this Label label) 
     { 
      label.ForeColor = new TextBox().ForeColor; 
     } 
    } 
} 

则:

using TextBoxExtensions; 

// ...

textbox.ResetColor(); 

当我尝试访问它在另一个文件中,我得到以下错误:

'System.Windows.Forms.TextBox' does not contain a definition for 'ResetColor' and the best extension method overload 'TextBoxExtensions.TextBoxExtensionsClass.ResetColor(System.Windows.Forms.Label)' has some invalid arguments 
+1

你的扩展方法扩展了'Label'类,而不是'TextBox'类。 – 2012-01-05 17:01:05

+0

如果你仔细观察,你会发现编译错误告诉你问题是什么 - 参数的类型不匹配。 – Nuffin 2012-01-05 17:07:53

回答

4

是什么类型textbox?您的扩展名为Label对象。我猜这是你的问题....你的textbox对象不是标签类型

1

你已经为Label类定义了扩展方法。然后,你试图在TextBox上使用它,由于显而易见的原因,它们不起作用(两个类别彼此没有关系)。

2

问题是您已经为Label类型定义了扩展方法,但正试图调用TextBox的实例。

2

试试这个,这将允许你使用它的任何类型的控件:

public static void ResetColor<T>(this T control) where T : Control, new() 
    { 
     control.ForeColor = new T().ForeColor; 
    }