C#中如何把函數當做參數傳遞到別的函數中


【問題】

C#想要傳遞函數參數,但是參數類型是函數,不知道如何傳遞。

【解決過程】

1.找了半天,看到這里:把函數名作為參數傳遞–C#委托的聲明和使用,說到用delegate,但是感覺有點復雜,而且不太像是能方便的解決此處的問題。

2.說實話,找了其他一些類似的帖子,還是沒太看懂。

3. 不過最后還是自己在他們的描述的基礎上,自己折騰出來了。

 

【總結】

將函數當做參數,傳遞到別的函數中,的確是通過代理實現的。

總體思路是:

1.先建一個delegate的函數,delegateFunc該函數的參數格式,要和你想要傳遞的那個函數funcToDelegate一致。即,參數個數,參數變量類型,順序等都一樣。

2.然后別的某個函數,比如beCalledFunction中,其參數,就可以支持帶delegate類型的函數作為參數了。

3.然后你在另外的其他的地方,某個函數anotherFunc中,就可以調用該beCalledFunction函數,把原先的funcToDelegate當做參數一樣,傳遞過去了。

通過例子,就很容易說明具體是如何操作的了:

 

原先代碼如下:

void funcToDelegate(object sender, KeyPressedEventArgs e)
{
    // yyyyyyyyyyyyyyyy
}
 
private void anotherFunc(object sender, EventArgs e)
{
    //xxxxxxxxxx
     
    hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(funcToDelegate); // normal one: pass funcToDelegate into some other func
    hook.RegisterHotKey(controlKeys, key);
}
 

  

 

加了代理,使得可以將函數作為參數傳遞,變成了這樣:

void funcToDelegate(object sender, KeyPressedEventArgs e)
{
    // yyyyyyyyyyyyyyyy
}
 
delegate void delegateFunc(object sender, KeyPressedEventArgs e); //(1) here para must same with the above function 'funcToDelegate', which is what you want to delegate, 's para
 
public void beCalledFunction(ModifierKeys_e paraA, Keys paraB, delegateFunc func) // (2) here para use that above delegate func as para
{
    hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(func);
    hook.RegisterHotKey(paraA, paraB);
}
 
private void anotherFunc(object sender, EventArgs e)
{
    //xxxxxxxxxx
    beCalledFunction(paraA, paraB, funcToDelegate); // (3) now can pass funcToDelegate to another func
}
 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM