1樓:
類似於c++中的函式指標,還是特別有用的。目前我主要用在兩個方面,一是實現函式指標功能,二是實現窗體間訊息捕獲。
2樓:原始碼蒐藏
如果你要訪問某一事物而不能夠直接去訪問這是就需要用委託去代替你訪問 委託就是乙個中間傳遞的作用
3樓:匿名使用者
就是函式指標。可以用於使用者自定義事件。cs中常用於窗體間訊息捕獲。
4樓:匿名使用者
委託的用法很多:一般是用於宣告事件和**的委託,還可以是用於代表方法標籤的委託.至於用法你可以在msdn上找.
以下是我個人的看法:
1)有了委託你就可以把方法看作像常數一樣,而委託就是該常數型別的變數.
從這個角度看來用於宣告事件的委託就是宣告這個事件觸發以後所呼叫的方法的標籤或者特徵.只有符合該標籤(引數個數和引數型別)的方法才可以做為該用於該事件的**.
乙個事件觸發了,你可能需要用多個方法處理該事件或者說該事件呼叫了多個方法(每個事件的例項都有乙個需要呼叫的方法列表,當事件觸發它會逐個呼叫列表中的每個方法)
2)通過使用委託你可以實現對方法變化的封裝.
打個比方:如果你騎自行車,你需要有騎自行車的方法drivebike().如果你騎電單車你需要有騎電單車的方法.
現在你有乙個方法drivemoto.現在你需要定義乙個方法,實現你騎(自行車或者電單車)到某地driveto(地點,騎的方式)
騎的方式這裡其實就是委託.在使用的時候,如果你是騎自行車你就用drivebike例項化委託的例項帶入driveto方法,如果你騎電單車你就用drivemoto例項化"騎的方式"這個委託帶入driveto方法.
c#裡委託是用來做什麼的,在什麼地方使用,為什麼要用委託。
5樓:匿名使用者
巧了,最近我才研究了一下。你學過c了吧,說白了,委託就是換了個名詞,跟什麼一樣呢,就跟c裡的函式指標類似,什麼是函式指標,就是乙個指向函式的指標,通過把函式名賦給指標,我們可以在需要的位置通過這個指標來呼叫函式。c#裡的委託就跟它類似,用法這樣的:
1.宣告乙個委託(函式指標)2. 創造符合委託格式的函式。
(指標指向的函式)3. 建立委託物件4. 將函式名稱賦值給委託。
這樣即可在需要的地方使用委託來呼叫函式。
使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。
委託的乙個有趣且有用的屬性是,它不知道或不關心自己引用的物件的類。任何物件都可以;只是方法的引數型別和返回型別必須與委託的引數型別和返回型別相匹配。
6樓:匿名使用者
我認為跨執行緒,特別是後台執行緒與前台執行緒之間用委託最合適
c#中的委託是什麼意思?
7樓:匿名使用者
這個是n多面試筆試裡面愛出的一道題,老生常談。。。
我討厭複製貼上,直接告訴你我的理解,希望對你有幫助---
委託是一種在物件裡儲存方法引用的型別,同時也是一種型別安全的函式指標。
給你舉個例子:
//宣告乙個委託,這裡的newdelegate()可以理解為是之後用來取方法的乙個型別。
delegate void newdelegate();
//下面定義的a,b兩種方法,你可以理解為newdelegate這個型別的兩個例項。
public void a(){};
public void b(){};
public void main()
事件是一種特殊的委託,為什麼這麼說呢?
用反編譯工具反編譯.net framework即可發現,事件的定義(這裡只是舉其中一種事件的定義,事件的引數在類庫中定義有區別),如下:
public delegate void eventhandler(object sender, eventargs e);
而常見的各種控制項的click事件是如何定義的呢?
public event eventhandler click;
說明 click事件是乙個委託
而我們常見的乙個button控制項新增乙個事件是怎麼做的呢?
pageload裡:button1.click+=new eventhandler(button1_click);
定義button1的事件 protected button1_click(object sender,eventargs e){}
如你所見,這是乙個很典型的委託呼叫。
c# 中 用委託有什麼好處? 它起什麼作用?
8樓:候寄翠
委託是一種定義方法簽名的型別,可以與具有相容簽名的任何方法關聯。您可以通過委託呼叫方法。委託用於將方法作為引數傳遞給其他方法。
事件處理程式就是通過委託呼叫的方法。您可以建立乙個自定義方法,當發生特定事件時某個類(例如 windows 控制項)就可以呼叫您的方法。委託是一種安全地封裝方法的型別,它與 c 和 c++ 中的函式指標類似。
與 c 中的函式指標不同,委託是物件導向的、型別安全的和保險的。委託的型別由委託的名稱定義。下面的示例宣告了乙個名為 del 的委託,該委託可以封裝乙個採用字串作為引數並返回 void 的方法。
c# 中 用委託有什麼好處? 它起什麼作用?
9樓:匿名使用者
什麼是委託
首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法(函式)的乙個東西。
如何使用委託
在使用委託的時候,你可以像對待乙個類一樣對待它。即先宣告,再例項化。只是有點不同,類在例項化之後叫物件或例項,但委託在例項化後仍叫委託。
宣告,如:
1 namespace vczx.procsharp.exc
2這就宣告了乙個委託,意義:任何乙個返回值為double,且只有乙個形參為double的函式,都可以用這個委託來呼叫。
注意:委託的宣告位置在namespace裡面,類的外面。其實,委託的宣告也可以在類的裡面,甚至是任何乙個可以宣告類的地方。
例項化:
首先我們要先有乙個滿足委託宣告的方法,假設乙個返回乙個數的2倍的方法:
1class mathsoperations27}
有了這樣乙個方法,我們就可以例項化乙個委託了:
mathsop operation = new mathsop( mathsoperations.multiplyby2 );
在例項化乙個委託時,要給它乙個引數,這個引數就是委託執行的方法,它可以是靜態方法,也可以是例項方法(這一點有別於函式指標,函式指標只能呼叫靜態方法),如:
mathsop operation = new mathsop( new class1().method1 );
在例項化完乙個委託之後,就可以用這個委託來呼叫方法了:
double result = operation( 1.23 );
例子**:
1namespace vczx.procsharp.exc
212 }
13 [stathread]
14 static void main(string args)
15 multiply by 2 is ", x, result );
20 console.read();
21 }
22 }
23}多路廣播委託
前面使用的委託只包含乙個方法呼叫。呼叫委託的次數與呼叫方法的次數相同。如果要呼叫多個方法,就需要多次顯示呼叫這個委託。
其實委託也可以包含多個方法,這種委託就是多路廣播委託。多路廣播委託派生於system.multicastdelegate,它的combine方法允許把多個方法呼叫鏈結在一起,我們可以通過+=來向委託新增呼叫方法,也可以用-=刪除其中的呼叫方法。
如:1namespace vczx.procsharp.exc
2 gives ", value, result );
9 }
1011 public static void squre( double value )
12 gives ", value, result );
15 }
16 }
1718 delegate void mathsop( double x );
1920 class start
2135 }
36}輸出:
multiplying by 2: 1.23 gives 2.46
squaring: 1.23 gives 1.5129
squaring: 1.23 gives 1.5129
注意,多路廣播委託宣告時必須返回void,否則返回值不知道應該送回什麼地方。對此,我做了乙個測試:如果不將委託的宣告返回void,則返回值返回的是最後乙個鏈入委託鏈的方法的返回值,編譯不會出錯。
為什麼要用委託
使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。與c或c++中的函式指標不同,委託是物件導向,而且是型別安全的。
10樓:匿名使用者
委託的好處很多,你可以先看設計模式裡的觀察者模式,在沒有委託這個模式的還是存在觀察者和被觀察者之間的耦合,而委託可以是兩者更大的解除耦合。在物件導向程式設計能接觸耦合就是最大的好處,委託也可以說是觀察者模式,這個模式的好處也可以說是委託的好處,它能使乙個物件狀態的改變立即通知其他物件,而這個物件和其它的物件是完全分離的,就是互相不知道對方的存在,這樣在程式規模變大的情況下更加容易維護(每乙個物件的修改不涉及另乙個物件),更加容易擴充套件(理由同上),也更加靈活。一句話就是達到解耦的目的。
c#中的委託有什麼作用和好處,在什麼地方要用委託,麻煩通俗講一下,最好有個例子,謝謝
11樓:匿名使用者
先不說委託,至少事件應該用過吧?事件就是一種特殊的委託。
另外你可以把int i=5;代表乙個整形變數i,並賦值為5,那麼假設讓你用乙個變數代表某個方法你會怎麼寫?
這就是委託,可以將方法抽象,定義乙個委託: public delegate void funa();
那麼 funa就代表乙個「方法變數型別」,可以定義這個「型別方法的變數」,並可以對這個變數賦值任何 返回值為void ,無引數的方法。
如 funa a=func1;
C中委託的問題
strparafunc spf1 new strparafunc printstring 宣告乙個委託,也就是乙個函式指標。這個指標指向的不是乙個物件,而是乙個方法。strparafunc spf2 printstring 宣告另乙個委託,指向printstring函式。spf1 1,a strin...
C60有什麼用途,C60有哪些用途?它的物理性質有哪些?
c60的用途 在c60被發現的短短的十多年中,富勒烯已經廣泛地影響到物理,化學,材料學,電子學,生物學,醫藥學等各個領域,極大地豐富和提高了科學理論,同時也顯示出具有巨大的潛在應用前景.據報道,對c60分子進行摻雜,使c60分子在其籠內或籠外俘獲其它原子或集團,形成類c60的衍生物.例如c60f60...
C中通過委託來呼叫物件方法的基本過程
第一步 定義委託並定義該委託物件 public delegate void doubleclickeventhandler object sender,這裡可以用自定義的類物件,也就是你需要傳值的物件或者方法 e 雙擊listview事件委託 public event doubleclickeven...
C語言中的sturct用途, 在c語言中的意思
結構體。c為了更好的處理資料問題,引入了結構體的概念。具體用法你可以到網上搜下。我不廢話了。這是用來定義結構的函式 例如 struct student 在c語言中的意思 階乘指從1乘以2乘以3乘以4一直乘到所要求的數。例如所要求的數是4,則階乘式是1 2 3 4,得到的積是24,24就是4的階乘。例...
c語言中各種語句的用途用法,C語言各類符號意義以及用法是什麼?
auto用於說明自動變數,通常不用 volatile 易變的 表示該變數不經過賦值,其值也可能被改變 例如表示時鐘的變數 表示通訊埠的變數等 c語言32個關鍵字 code auto 宣告自動變數 一般不使用double 宣告雙精度變數或函式 int 宣告整型變數或函式 struct 宣告結構體變數或...