對(duì)委托在C#異步委托和多線程中的理解
談到對(duì)委托在C#異步委托和多線程中的理解,在實(shí)際的開發(fā)過程中是怎么樣的呢?讓我們開始吧:
關(guān)于這個(gè)問題,我想很多初學(xué)者跟我一樣有很多疑問吧。下面我說的內(nèi)容也許不正確,我在這里真的很希望大家能夠指正,因?yàn)槲抑v的只是我自己的理解。
其實(shí)異步委托跟多線程在C#編程上是沒有關(guān)系的。我做了一個(gè)Sample,我實(shí)在沒看到任何地方寫上了CreateThread這樣的語句,但是卻能達(dá)到異步的效果,也許,系統(tǒng)將處理的線程隱藏了,由操作系統(tǒng)管理,而不希望用戶太多地介入,從而導(dǎo)致混亂。
C#異步委托之委托的理解
在這里我想重新提一下什么是委托,msdn上說得似乎有點(diǎn)晦澀,這個(gè)也不怪他們。我有一個(gè)同學(xué)是在微軟做翻譯的,呵呵。很多翻譯工作其實(shí)并不是由長(zhǎng)期從事開發(fā)的人寫的,而是一些大學(xué)畢業(yè)生或者英語比較好的人(小笑一下,本人在vs 2005 beta的時(shí)候曾經(jīng)幫導(dǎo)師翻譯msdn,自我感覺翻譯的比后來的微軟翻譯的好)。Ok,言歸正傳,委托其實(shí)就等于C++里面的函數(shù)指針,是指向函數(shù)地址的變量。我想,也許是為了更加面向?qū)ο螅⑶冶苊庵羔樀臑E用而導(dǎo)致系統(tǒng)錯(cuò)誤,C#引用了委托這個(gè)概念。其實(shí)不管是事件,還是委托,大家都可以把它們看成跟類一樣的東西,都需要聲明,都需要進(jìn)行實(shí)例化,并且其實(shí)例可以看成引用類型的對(duì)象。這樣的話,更加容易理解很多覺得很神秘的東西。
C#異步委托之委托就是聲明一個(gè)“函數(shù)指針”,但這個(gè)“指針”必須要聲明其指向函數(shù)的形式,也就是說,我如果聲明委托為:
- public delegate void BinaryDelegate(int startIndex, int count);
那么,這個(gè)委托只能指向“返回值是void,參數(shù)分別為int startIndex, int count”的函數(shù)。
Ok,是否這樣就可以使用委托了呢?當(dāng)然不可以啦,前面已經(jīng)說過,C#是純面向?qū)ο蟮恼Z言,它一定不能有指針,并且,我也說過了在C#中,像委托或者事件什么的,我們其實(shí)都可以看成是引用類型的變量,所以,在使用之前要實(shí)例化,只有實(shí)例化才能被稱為對(duì)象,否則只是提出了一個(gè)概念,不能實(shí)際應(yīng)用。例如,我們提出“人類”(human)這個(gè)概念,但是只有實(shí)例化了“人類”->“張三”,這個(gè)“張三”才能被驅(qū)使,比如我叫張三去端水。我不能叫“人類”去端水。
C#異步委托之委托的應(yīng)用
- BinaryDelegate addingDelegate = new BinaryDelegate(AddingFunction);
請(qǐng)注意,實(shí)例化的參數(shù)(相當(dāng)于構(gòu)造函數(shù)的參數(shù))只能是函數(shù)名稱,這個(gè)函數(shù)名稱是不能帶參數(shù)的(是不是跟C++的函數(shù)指針一樣呢?)。所以,如果一旦實(shí)例化委托,那么就必須在其作用域(類內(nèi)部或者外部)內(nèi)有其委托指明的函數(shù)存在,否則在編譯時(shí)報(bào)錯(cuò)。
C#異步委托之委托的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#異步委托之委托有所幫助.
【編輯推薦】