2009-10-20 69 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

它用來標記擴展方法被添加到對象的類型。