C 基礎系列 C 中委託與事件 一

2021-06-20 04:57:09 字數 1188 閱讀 5019

我們都知道,c#中有「介面」這個概念,所謂的「介面」就是定義一套標準,然後由實現類來具體實現其中的方法,所以說「介面,是一組類的抽象」。同樣道理,我們可以將「委託」理解為「方法的抽象」,也就是說定義乙個方法的模板,至於這個方法具體是怎麼樣的,就由方法自己去實現。

我們知道介面的最大好處就是可以實現多型,同理,「委託」是可以實現方法的多型,當我們想呼叫某個具體方法的時候,我們不直接呼叫這個方法,而是去呼叫這個委託。當然,我們必須在具體方法和委託之間建立某種關聯。

定義和使用委託分三個步驟:

1、委託宣告。2、委託例項化。3、委託呼叫。

一、定義委託

定義委託的語法如下:

《訪問修飾符》 delegate 返回型別 委託名();

定義委託和定義方法很相似,委託沒有具體的實現體,由關鍵字delegate宣告,直接以分號結束。委託能夠代表什麼樣的方法,由它的返回值型別和引數列表決定。如下定義如下委託:

public delegate void mydelegate(string name);

那麼使用mydelegate委託代表的只可以是沒有返回值,引數為乙個字串的方法。

二、例項化委託

定義了委託之後,如何使用委託代表方法執行呢?首先要例項化委託。例項化委託就是將其指向某個方法,即呼叫委託的建構函式,並將相關聯的方法作為引數傳遞。

如:如乙個方法

private int add(int num1,int num2)

委託宣告了以後,就可以象類一樣進行例項化,例項化時把要引用的方法(如:add)做為引數,這樣委託和方法就關聯了起來,就可以用委託來引用方法了。

委託和所引用的方法必須保持一致:

1、引數個數、型別、順序必須完全一致。

2、返回值必須一致。

3、傳入的方法中不能帶引數,只寫方法名。

三、呼叫委託

要呼叫委託的方法用委託的物件加引數,如果引數為空,也要加小括號。

為方法建立乙個委託,然後立即通過這個委託呼叫該方法並沒有太大意義,因為直接呼叫方法更簡單。動態呼叫方法時,委託才真正顯示出它的效用。

using system;

delegate int operand(int a, int b); //第一步:委託宣告

class class1

//定義乙個方法,求兩個加數的和

private int add(int num1, int num2)

}

C 中委託與事件

c 為了型別安全,預設並不支援指標。而是採用委託的方式。委託的宣告 屬性 修飾符 delegate 返回型別 委託型別名 引數列表 其中返回型別和引數列表共同決定了委託型別能關聯的一組方法 public delegate int tdelegate int a,int b 宣告委託 在類classd...

C 中委託和事件

當我們在窗體下定義變數後,是不是可以輕而易舉在此窗體使用這個變數呢?那麼如果跨窗體引用呢?其實也簡單,普遍操作,定義乙個全域性變數,但是這樣操作不規範,取而代之的是應該在某個窗體定義乙個類,然後在類中宣告乙個靜態變數,此時跨窗體使用的時候直接使用classname.staticname 既然變數可以...

C 中委託和事件的區別

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。通過委託執行方法 class program public class examplevoid print str...