c 中的委託 一

2022-06-21 12:48:10 字數 2789 閱讀 6356

1.委託的定義

官網解釋:委託型別表示對具有特定引數列表和返回型別的方法的引用。 通過委託,可以將方法視為可分配給變數並可作為引數

傳遞的實體。

委託還類似於其他一些語言中存在的「函式指標」概念。 與函式指標不同,委託是物件導向且型別安全的。

說明:(1)可以直接定義在命名空間下面,與其他的類平級,也可以定義在類的內部,如果定義在類的內部則需要呼叫該類的成員才能使用。

(2)委託類似於方法(或函式)的模板,相當於是對方法的抽象,而類是對一組屬性和行為的抽象。

1.1委託的宣告

訪問修飾符 delegate 返回值  方法名(形參列表)

public

delegate

double test(double r)

1.2委託的例項化

委託的使用類似於普通的類,可以理解為特殊的類,使用new關鍵字建立委託物件。

委託    委託物件 = new  委託(方法名);

program p = new program();

test t1 = new test(examtest);

test t2 = new test(p.commontest);

上述**中,委託物件t1就指向了examtest,t2物件就指向了commontest方法。

注意:此處的方法名所代表的方法必須與宣告委託的方法簽名一樣,也就是說,examtest方法的返回值和引數列表與test委託一致

//此處examtest為靜態方法,可以在program類的main方法中直接呼叫

public

static

double examtest(double

score)

//此處commontest為例項方法,需要在program類的物件中呼叫

public

double commontest(double

score)

2.委託型別的使用

再定義個方法,以委託型別test的物件為形參

public

string

totaltest(test t1, test t2)

+平時成績*0.4=的和=",

t1(90.4), t2(86.3), t1(90.4) + t2(86.3

));}

需要注意的是,在具體使用委託物件時(也就是需要委託物件所代表的方法返回值)做計算,返回值等操作,委託物件t1,和t2就必須要有引數列表並給定實參,如t1(90.4), t2(86.3),且實參的型別需要與定義時的形參型別相同。

在main方法中呼叫

program p = new

program();

//

此處分別建立了2個委託物件,分別指向了靜態方法examtest和例項方法commontest

test t1 = new

test(examtest);

test t2 = new

test(p.commontest);

console.writeline(p.totaltest(t1, t2));

執行結果

3.小結

(1)委託型別是方法的抽象,可以使用委託型別作為方法的形參,代表了一組返回值和形參列表相同的方法。類似介面可以作為方法的形參,實現這個介面的類都可以替換該介面作為方法的實參。介面實現了類級別的多型,委託實現了「方法」級別的多型,雖然不準確,但是可以這麼理解。

(2)委託物件做為方法的形參時(如public string totaltest(test t1, test t2)),如果需要用到委託型別的返回值時,必須加上所指向方法的實參(如commontest(86.3), examtest(90.4))。委託物件作為形參時,不關心將來需要指向的方法是誰,只有當委託物件有具體指向的方法,並需要使用到方法的返回值時,才需要加上指定型別的實參。

4.源**

using

system;

namespace

委託3

//此處commontest為例項方法,需要在program類的物件中呼叫

public

double commontest(double

score)

//委託物件t1,t2作為其他方法形參時,可以指向任何返回值與形參列表相同的方法

public

string

totaltest(test t1, test t2)

+平時成績*0.4=的和=",

t1(90.4), t2(86.3), t1(90.4) + t2(86.3));//

委託物件(實參),相當於指定了實參,呼叫了一組返回值與形參列表相同的方法

}

public

string totaltest(double

score, test t1, test t2)

+平時成績*0.4=的和=",

C 中的委託機制 一)

c 中的委託機制那麼什麼是委託呢?其實呢生活中有很多委託的例子。比如你看中了二環的一套別墅對吧,你想要買 不是我,我連租都租不起 那就要去找中介,中介呢就會去找賣這個房子的人,和他進行溝通,那麼這裡的中介就相當於乙個委託人的角色,也可以說是一種 在c 中,程式想要呼叫方法進行引數的傳遞時會有相當大的...

c 中事件委託(一)

事件和委託是兩個概念,不是乙個名詞,委託就是一件事自己不能做或者不想做,然後讓別人去完成,定義了乙個完成的概念,是乙個型別,而事件就是完成這件事的執行者,是乙個成員,也可以這麼理解,委託是對事件的定義,相當於定義了乙個類,而事件就是這個類的乙個物件,雖然語法上不是這個樣子,但是在委託的編譯過程中就是...

C 中的委託

委託是個比較讓人費解的東西,最近把這個東西翻來覆去看了幾遍了,有了些想法,希望能對同樣卡在這裡的同志一些啟發。在這裡主要提供一種理解思路,畢竟像基本語法 規範之類的,查參考書是最好的了。首先來看看乙個宣告乙個物件的過程 class someclass 定義乙個類 someclass sample 宣...