C 委託型別

2021-06-23 05:01:26 字數 2543 閱讀 4110

委託是c#

語言提供的新的引用型別,即委託型別,也稱**型別。在功能上類似於

c語言的函式指標,目的是通過委託型別物件去呼叫相同簽名的函式。 

委託是從system.delegate

中派生的,因此是型別安全的。 

採用委託可以實現通用程式的編寫。

委託的操作步驟:

1. 定義委託型別 

2. 定義委託物件

3. 定義委託方法的實現 

4.委託的呼叫

委託的定義步驟

1. 定義委託型別

委託型別定義格式為:

修飾符 

delegate 

函式返回型別 委託型別名(函式形參列表) 

例如:public delegate bool dtest(person p,string s);

表示定義了乙個委託型別,它能代表第乙個引數為person

物件,第二個引數為

string

型別,返回值為

bool

型別的函式。

2. 定義委託物件

委託物件定義格式為:

委託型別名 委託物件名=new

委託型別名

(委託方法名

);其中委託方法名可以是某個類的靜態方法名,也可以是某個物件的例項方法名。方法的引數型別、返回型別必須與委託型別名的要求一致。

例如:dtest d1=new dtest(find.findpeoplebyid);

表示將委託物件d1

代表find

類的findpeoplebyid

靜態方法。具體見下面的例

10-10

。以後就可以通過呼叫

d1來達到呼叫

findpeoplebyid

函式的目的。 

3. 定義委託方法的實現

委託方法是真正要呼叫的函式,根據邏輯需要,在類中定義其實現過程。

例如:public static bool findpeoplebyid(person p,string s)

4. 委託的呼叫

格式為:委託物件名(實參列表);

例如:

d1(p1, "320402196312091234");

【例項】

using system;

using system.collections.generic;

using system.linq;

using system.text;

public delegate bool dtest(person p, string s);

namespace delegatecase

personarray[i - 1].display();

i = 0;

d1 = new dtest(find.findpeopleby***);  

//將委託物件代表findpeopleby***函式

foreach (person tp in personarray)

personarray[i - 1].display();

console.readkey();

} }}class find  

//定義查詢類,提供人員的各種查詢方法

public static bool findpeopleby***(person p, string s) }

public class person

public string name set }

public string id }

public virtual void display()  

//virtual為修飾符,定義虛函式

,姓名:,性別為:", id, name, ***);

} public person(string pid, string pname, string p***) }

public class student : person

set }

public void updategrade(string pgrade)

public student(string pid, string pname, string p***, string pgrade)

: base(pid, pname, p***)

public override void display()  

//override為修飾符,覆蓋基類中的相同虛函式

,姓名:,性別為:,年級為:", id, name, ***, sgrade); }}

public class worker : person

set }

public void updatewage(int pwage)

public worker(string pid, string pname, string p***, int pwage)

: base(pid, pname, p***)

public override void display()

,姓名:,性別為:,工資為:", id, name, ***, wage); }

}

C 委託二 委託型別

我們都應該清楚,在使用委託之前,先要定義乙個委託型別,如下所示 delegate int mydelegate int a,int b mydelegate md null 既然叫做委託型別 就說明 mydelegate 實際上是乙個類,上面的寫法只是一種簡單的縮略寫法,實際上,我們自己定義的委託,...

C 函式委託型別

rel file list href file c 5cdocume 7e1 5cadmini 7e1 5clocals 7e1 5ctemp 5cmsohtml1 5c04 5cclip filelist.xml c 函式委託型別 rel file list href file c 5cdocum...

C 委託型別Action和Func

簡述 action和func就是泛型委託,作用就是可以為我們省去定義委託的步驟。1.action為返回型別為void且無參的委託 等價於delegate void 委託名 使用方式 static void dofirstwork 在工作 task.currentid action t1 new ac...