1.委託的定義
官網解釋:委託型別表示對具有特定引數列表和返回型別的方法的引用。 通過委託,可以將方法視為可分配給變數並可作為引數
傳遞的實體。
委託還類似於其他一些語言中存在的「函式指標」概念。 與函式指標不同,委託是物件導向且型別安全的。
說明:(1)可以直接定義在命名空間下面,與其他的類平級,也可以定義在類的內部,如果定義在類的內部則需要呼叫該類的成員才能使用。
(2)委託類似於方法(或函式)的模板,相當於是對方法的抽象,而類是對一組屬性和行為的抽象。
1.1委託的宣告
訪問修飾符 delegate 返回值 方法名(形參列表)
public1.2委託的例項化delegate
double test(double r)
委託的使用類似於普通的類,可以理解為特殊的類,使用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方法中直接呼叫2.委託型別的使用public
static
double examtest(double
score)
//此處commontest為例項方法,需要在program類的物件中呼叫
public
double commontest(double
score)
再定義個方法,以委託型別test的物件為形參
public需要注意的是,在具體使用委託物件時(也就是需要委託物件所代表的方法返回值)做計算,返回值等操作,委託物件t1,和t2就必須要有引數列表並給定實參,如t1(90.4), t2(86.3),且實參的型別需要與定義時的形參型別相同。string
totaltest(test t1, test t2)
+平時成績*0.4=的和=",
t1(90.4), t2(86.3), t1(90.4) + t2(86.3
));}
在main方法中呼叫
program p = newprogram();
//此處分別建立了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.源**
usingsystem;
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 宣...