委派 delegate C# 基本概念具現化

  • 2346
  • 0
  • C#
  • 2023-04-18

委派 delegate C# 基本概念具現化

怎麼宣告跟使用我想MSDN和GOOGLE就夠了

這邊只是筆記一下委派的小觀念(總覺得有點抽象)

我想用傳遞參數來解釋委派會比較具體好懂點兒

原本我們常用的傳遞參數是來傳遞String,int等等型別

舉例來說就是

int XaddY(int x,int y){return x+y;}

這是原本我們常用的傳遞參數(x,y)的方式

而這跟委派又有甚麼關係呢?

今天(何年何月)我們可能會想在A函式內使用B函式

直覺上會使用

void A()
{
  //dosomething
  B(1);
}

void B(string c)
{
  //dosomething
}

但是如果今天B函式並非固定的呢?

我想用傳遞參數的方式把我想用的函式丟進A裡頭,讓A用我給他的函式來處理(這樣就不用寫死B並且可以根據工作需要來執行不同的B程序)

所以我想的表達方式是

void A(B)
{
  //dosomething
  B(1);
}

C#用來實現以上需求的東西就叫做委派(delegate)!

實作上需要先宣告一個委派(就是我們想傳遞的函式B)

因為A還不知道你會傳甚麼進來(因為B函式沒有定義在該組件中,而是由我們(外部)傳遞給A的)

所以我們需要先宣告一個空殼(這叫委派!)

public delegate bool MethodB(string s);

 麻雀雖小,五臟也不全,但是頭跟尾需要先定義好讓A知道可以傳甚麼進去,而你又會排放甚麼排泄物出來,他才不管你內部是怎麼去消化的呢!

這行的意思是我定義一個我等等要傳進來的函式(這叫委派),這個函式會接收一個String參數,並且Return一個布林值,內部做甚麼事就不得而知了,你只管使用就對了

所以程序可以這樣寫

public delegate bool MethodB(string a);
 
void A(MethodB B)
{
  //dosomething
  B(1);
}

意思就是A會照你給的B函式來處理工作

結論是你可以將委派理解為傳遞一個參數,該參數不是字串也不是整數而是一個函式(Function)

或者你也可以將委派理解為一個函式(Function)的指標(point),如果你學過C/OOP了話這樣可能可以幫助你理解這東西

以上就是今天遇到的問題跟自己現在的理解

參照

http://huan-lin.blogspot.tw/2009/01/delegate-revisited-csharp-1-to-2-to-3.html

PS5