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