說起委託,有些剛剛入門c#的人感覺很高大上,沒有接觸過,但是其實很多人都用過lambda表示式,實際上lambda表示式就是乙個委託。
關於委託入門有個大神寫的很詳細:張子陽的部落格 c#中的委託和事件 - part.1 。下面就按照思明的理解介紹一下委託入門
1、委託是什麼
委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用if-else(switch)語句,同時使得程式具有更好的可擴充套件性。
1.2 委託分類:
1.單播委託:繫結單個方法
2.多播委託:繫結多個方法
2、為什麼使用委託
開發人員可以把方法的引用封裝在委託物件中(把過程的呼叫轉化為物件的呼叫,充分體現了委託加強了物件導向程式設計的思想),然後把委託物件傳遞給需要引用方法的**,這樣在編譯的過程中我們並不知道呼叫了哪個方法,這樣一來,c#引入委託機制後,使得方法宣告和方法實現的分離,充分體現了物件導向的程式設計思想。
3、委託怎麼用
3.1 委託的定義其實很簡單:如下,首先新建乙個控制台程式,然後進行如下操作,
(1)、新建了乙個類用來 定義委託以及進行委託宣告
我們應該注意一點:委託的形參型別,形參個數和委託的返回值必須與將要繫結的方法的形參型別,形參個數和返回值一致;
public(2)、委託的方法繫結以及呼叫class
gmanage}}
在控制台程式 program.cs中新增如下**:
public執行,輸出結果如下:class
program
+=", x, y, x +y);
}public
static
void write2(int x, int
y) *=
", x, y, x *y);
}static
void main(string
args)
}
3.2 如上操作我們進行了委託的操作,主要兩步操作:宣告委託和註冊方法(也叫繫結方法)
1.宣告委託 用delegate宣告;
2.繫結方法 繫結具體方法,傳遞方法名稱;
3.3 如上操作我們知道了委託可以進行方法繫結,同樣的委託也可以進行方法解綁:如下我們只修改 program.cs中的main方法。
在原有的基礎上新增解綁方法 -=
static執行結果如下:委託僅僅執行了write1。void main(string
args)
3.4 什麼是委託鏈
換言之就是多播委託就可以產生委託鏈,以+= 和-=操作符分別進行繫結和解除繫結的操作,多個方法繫結到委託變數就形成了乙個委託鏈。對其進行呼叫的時,將依次呼叫所有**的方法。
4、總結
委託就是乙個類,他的好處非常多,比如避免核心方法中存在大量的if....else....語句(或swich開關語句);滿足程式設計的ocp原則;使程式具有擴充套件性;結合lambda表示式,簡化**,高效程式設計;實現程式的松耦合(解耦),這個在事件(event)中體現比較明顯等等。
委託擴充套件了我們的認知面,讓我們進一步了解c#的博大精深。
c 委託事件入門 第二講 事件入門
上文 c 委託事件入門 第一講 委託入門 中和大家介紹了委託,學習委託必不可少的就要說下事件。以下思明仍然從事件是什麼 為什麼用事件 怎麼實現事件和總結介紹一下事件 1 事件是什麼 1.1 net事件建立在委託機制之上,事件是對委託的封裝。1.2 事件的分類 強型別事件和弱型別事件 2 為什麼用事件...
Linux入門第一講
linux最大的特點 開放原始碼 由於原始碼的開放,linux開發是世界性的,大佬們更改完linux的bug再傳到網上 世界上最優秀的程式設計師開發出來的 為什麼大佬們喜歡用linux系統?因為大佬們的水平比較高,它們更多的是面向檔案,面向系統,另外圖形介面的控制,速度和其他的一些配置都比字元介面要...
python入門第一講 Hello world
開始寫程式之前,先嘮叨幾句便於你對命令列模式和python互動模式有乙個簡單的了解。在開始選單搜尋cmd並開啟,1 命令列模式 cd change directory dir 檢視當前目錄檔案列表 如檢視c盤中的目錄檔案列表,只需輸入 cd c 點回車,便改變當前目錄到c盤下了,然後輸入dir,點回...