C#基礎系列--C#中委託與事件(一)

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

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

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

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

一、定義委託

定義委託的語法如下:

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

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

public delegate void MyDelegate(string name);

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

二、例項化委託

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

如:如一個方法
         private int Add(int num1,int num2)
         {
             return(num1+num2);
         }

委託宣告瞭以後,就可以象類一樣進行例項化,例項化時把要引用的方法(如:Add)做為引數,這樣委託和方法就關聯了起來,就可以用委託來引用方法了。
委託和所引用的方法必須保持一致:
1、引數個數、型別、順序必須完全一致。
2、返回值必須一致。
3、傳入的方法中不能帶引數,只寫方法名。

三、呼叫委託

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

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

using System;

delegate int Operand(int a, int b); //第一步:委託宣告
class Class1
{
static void Main(string[]args)
{
    Class1 c1 = new Class1();
    Operand ope = new Operand(c1.Add);
    //委託例項化,注意引數是要使用的引數名,且不帶括號
    Console.WriteLine(ope(10, 20)); //委託呼叫,呼叫委託的方法用

委託的物件加引數
    Console.ReadLine();
}
//定義一個方法,求兩個加數的和
private int Add(int num1, int num2)
{
    return (num1 + num2);
}
}

相關文章