C 委託詳解

2022-02-20 09:03:01 字數 2143 閱讀 6861

c#委託

1.委託定義:委託是一種資料型別,和類是同級別的,delegate可以直接看著關鍵字class,我們可以直接將delegate看著為class,區別為class裡存放的是一系列方法,屬性,字段,事件,索引。而delegate裡存放的是一系列具有相同型別引數和返回回型別的方法的位址的位址。可以看著為儲存方法的載體。

2.委託的宣告:delegate 《函式返回型別》 委託名(函式引數)      例:public delegate void mydelegate(string name);

3.委託的例項化:

(1) 《委託名》 例項化名 =  new 《委託名》(註冊函式)  注意:註冊函式不包含引數,或者可以直接將乙個註冊函式賦值給委託

例  mydelegate delegateinstance = new mydelegate(method);

(2)匿名方法例項化委託

《委託型別》 《例項化名》=delegate(《函式引數》);

(3)使用lamda表示式例項化委託

例項化例子如下所示:

class

program

;//3、使用lambda表示式

mydelegate mydelegatelambda = (int x, int y) => ;

}static

int getsum(int x, int

y)

}

4.多播委託

例項化委託時必須將乙個匹配函式註冊到委託上來例項化乙個委託物件,但是乙個例項化委託不僅可以註冊乙個函式還可以註冊多個函式,註冊多個函式後,在執行委託的時候會根據註冊函式的註冊先後順序依次執行每乙個註冊函式。

多播委託實際上形成委託鏈 ------------》函式註冊委託的原型:《委託型別》 《例項化名》+=或者-=new 《委託型別》(《註冊函式》)

如果在委託註冊了多個函式後,如果委託有返回值,那麼呼叫委託時,返回的將是最後乙個註冊函式的返回值。

注意:委託必須先例項化以後,才能使用+=註冊其他方法。如果對註冊了函式的委託例項從新使用=號賦值,相當於是重新例項化了委託,之前在上面註冊的函式和委託例項之間也不再產生任何關係。

5.泛型委託

委託也支援泛型的使用     

泛型委託原型:

delegate 《委託名》(t1 t1,t2 t2,t3 t3...)

6.內建泛型委託

delegate      void   action:泛型委託是可以達到16個引數的返回值的委託。委託無返回值

delegate  tresult fun:fun是內建泛型委託,具有返回值

delegate bool predicate(t obj);  內建泛型委託,返回bool值

7.委託的清空

1

、在類中申明清空委託方法,依次迴圈去除委託引用。方法如下:

public

class

testdelegate}}

2、如果在類中沒有申明清空委託的方法,我們可以利用getinvocationlist查詢出委託引用,然後進行去除。方法如下:

testdelegate test = new

testdelegate();

if (test.ondelegate != null

)}

8.委託的用處

1.高內聚低耦合

2.觀察者模式

C 委託詳解

c 委託 1.委託定義 委託是一種資料型別,和類是同級別的,delegate可以直接看著關鍵字class,我們可以直接將delegate看著為class,區別為class裡存放的是一系列方法,屬性,字段,事件,索引。而delegate裡存放的是一系列具有相同型別引數和返回回型別的方法的位址的位址。可...

C 委託簡單詳解

宣告委託 在c 中使用乙個類分兩個階段,首選定義這個類,告訴編譯器這個類由什麼欄位和方法組成的,然後使用這個類例項化物件。在我們使用委託的時候,也需要經過這兩個階段,首先定義委託,告訴編譯器我們這個委託可以指向哪些型別的方法,然後,建立該委託的例項。定義委託的語法如下 delegate void i...

C 委託詳解例項

首先看乙個例子,一名律師代表三名員工向老闆討薪 員工將討薪方法委託為律師 涉及到三個物件 員工,老闆,律師 員工 class employee public employee string name,int money 員工有討薪的權利,也就是有這個方法 public void getmoney b...