委託是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...