2009-10-20 91 views
2

我读了一些C#代码,无法理解函数参数中的“this”关键字?有人能告诉我它用于什么吗?谢谢。什么是“这个”用于?

public static class ControlExtensions 
{ 
    public static void InvokeIfNeeded(this Control ctl, 
     Action doit) 
    { 
     if (ctl.InvokeRequired) 
      ctl.Invoke(doit); 
     else 
      doit(); 
    } 

    public static void InvokeIfNeeded<T>(this Control ctl, 
     Action<T> doit, T args) 
    { 
     if (ctl.InvokeRequired) 
      ctl.Invoke(doit, args); 
     else 
      doit(args); 
    } 
} 

回答

18

它用于指定extension method的操作类型。也就是,public static void InvokeIfNeeded(this Control ctl, Action doit)“将InvokeIfNeeded方法”添加到Control类(以及所有派生类)中。但是,只有当您明确地将其声明的类的名称空间导入到作用域中时,才能使用此方法。

+0

感谢您的链接,帮助我更好地理解。 –

3

它表示扩展方法。在你给出的例子中,任何Control对象都可以使用InvokeIfNeeded(Action doit)方法。除了Control已经拥有的所有方法之外,

0

将'this'关键字添加到像这样的参数将导致该方法被解释为扩展方法而不是常规的静态方法。

0

方法声明中的此修饰符表示该方法是扩展方法。

1

该方法的静态声明和传入的该修饰符表示一个扩展方法,其中所有的控件对象都会添加这些方法,就好像它们最初是以这种方式构建的一样。

即: 现在你可以做

Control myControl = new Control(); 

myControl.InvokeIfNeeded(myaction); 

myControl.InvokeIfNeeded(myaction, args); 
1

它用来标记扩展方法被添加到对象的类型。