close

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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()