委託聲明及調用

//委託的聲明
public delegate void NoReturnNoPara();
public delegate void NoReturnWithPara(int x,int y);
public delegate string NoPara();
public delegate DateTime WithPara(string name,int size);


NoReturnWithPara method = new NoReturnWithPara(ShowAdd);
//由於在靜態類中,因此調用的也必須爲靜態類 //調用的也必須跟其聲明時的返回類型和參數必須一致 NoReturnWithPara method1 = ShowAdd; // 能夠直接將方法賦值給聲明的委託 method.Invoke(4, 3);//委託的調用1 method(4, 5);//委託的調用2 method.BeginInvoke(6, 7, null, null);//異步調用 public static void ShowAdd(int x,int y) { Console.WriteLine("這裏是ShowAdd x = {0} y = {1}",x,y); }
*************************************************************************
委託可用於解耦
例子,如碰見人打招呼時,分爲美國人和中國人,說話的方式不同
那麼普通方法遍以下:
public static void Greeting(string name,PeopleType type)//傳遞值,根據值來決定行爲
{
if(type == PeopleType.Chinese)
{
Console.WriteLine("{0},早上好!", name);
}
else if(type == PeopleType.English)
{
Console.WriteLine("{0},Good Morning!", name);
}
else
{
throw new Exception("wrong PeopleType");
}
}
public enum PeopleType
{
Chinese,
English
}
View Code
而咱們能夠經過委託來傳遞第二個參數值,這樣咱們擴展時,只需在GreetingClass類中添加方法,並對應調用就行。
GreetingHandler handler = new GreetingHandler(GreetingClass.GreetingEnglish);
public static void GreetingChinese(string name)//方法1的聲明,即調用的參數
{
Console.WriteLine("{0},早上好!", name);
}
public static void GreetingEnglish(string name)//方法2的聲明,即調用的參數
{
Console.WriteLine("{0},Good Morning!", name);
}

public static void Greeting(string name,GreetingHandler handler)//傳個方法給我,我去執行
{
handler.Invoke(name);
}

public delegate void GreetingHandler(string name);//委託聲明

GreetingHandler handler = new GreetingHandler(GreetingClass.GreetingEnglish);//調用,GreetingClass.GreetingEnglish,GreetingClass類下的GreetingEnglish方法
GreetingClass.Greeting("韓非子", handler);
View Code
相關文章
相關標籤/搜索