Delegate Steps:
- 步驟1.定義委派
- 步驟2.定義處理委派之方法,記得要符合回傳以及傳入之型別
- 步驟3.定義自己的方法(用途再於觸發委派)
- 步驟4.呼叫自己寫的方法觸發委派
範例:找出字串陣列中特殊開頭以及結尾之名子。
//步驟1.定義委派,回傳:bool , 傳入:string
public delegate bool FunctionForString(string s);
//步驟2.定義處理委派之方法,記得要符合委派回傳以及傳入之參數型別
兩個處理委派之不同方法皆為,回傳:bool , 傳入:string
public static bool StartsWithA(string s)
{
return s.StartsWith("A"); //若字串開頭為A,回傳T,否則回傳F
}
public static bool EndsWithN(string s)
{
return s.EndsWith("n");//若字串結尾為n,回傳T,否則回傳F
}
//步驟3.定義自己的方法給程式呼叫用,傳入要判斷之字串myStrings,傳入委派之方法myFunction
//此方法回傳string[] , 傳入兩個參數分別為: 1.string[] myStrings 以及 2.FunctionForString myFunction
//請注意:FunctionForString 為 委派之簽名檔要與步驟1一樣 , myFunction:可自行修改。
public static string[] PerformOperationOnStringArray(string[] myStrings, FunctionForString myFunction)
{
//建立一個List用來存符合之名子
System.Collections.ArrayList myList = new System.Collections.ArrayList();
foreach (string s in myStrings)//s進去遶行傳入之字串陣列(myString)
{
//這裡會去依照步驟4傳入的myFunction去呼叫StartsWithA or EndsWithN 方法,並傳 s(每個名子) 給他們判斷。
//若傳入之myFunction為StartsWithA,這裡實際上就是 if(StartsWithA(s))
if (myFunction(s))
{
myList.Add(s);
}
}
return (string[])myList.ToArray(typeof(string)); //回傳處理好之陣列給步驟4
}
//步驟4.呼叫自己寫的方法觸發委派注意傳入StartsWithA , EndsWithN兩個不同方法
protected void Page_Load(object sender, EventArgs e)
{
string[] myStrings = { "Adam", "Alan", "Bob", "Steve", "Jim", "Aiden" };
//呼叫步驟3之方法,並傳入myStrings陣列以及處理委派之方法名稱。
string[] stringsA = PerformOperationOnStringArray(myStrings, StartsWithA);
//呼叫步驟3之方法,並傳入myStrings陣列以及處理委派之方法名稱。
string[] stringsN = PerformOperationOnStringArray(myStrings, EndsWithN);
//印出處理好之字串陣列並印出
Response.Write("印出開頭為A"+"<br/>");
foreach (string s in stringsA)
Response.Write(s + "<br/>");
Response.Write("印出結尾為N"+"<br/>");
foreach (string s in stringsN)
Response.Write(s + "<br/>");
}
更多範例可以參考:(以Delegate搭配泛型實做BubbleSort):
https://drive.google.com/open?id=0B1K8K3aq2HqbY1UtRVFMLWFnQU0
留言列表