物件導向課程心得Part3

上一篇講到Delegate
今天要來講另外兩個東西也是委派 

其實.NET 
2.0之後 提供Action<T>  
3.5之後 有提供Func<T, TResult> 
這兩個也是委派
也就是委派的簡化版本
來看看下面的Code吧

delegate 與 Action<T>
//宣告一個Void的delegate委派
delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {                                 
      DisplayMessage messageTarget = ShowWindowsMessage;//將ShowWindowsMessage方法加入到委派清單
      messageTarget.Invoke("Mickey");
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

//Action<T> ==> public delegate void Action<T>
public class TestLambdaExpression
{
   public static void Main()
   {
    //這行可以看成宣告一個Void的delegate,參數是一個string的型別
      Action<string> messageTarget=ShowWindowsMessage;
      messageTarget.Invoke("Mickey");
    
   }
   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}
//Void表示不回傳東西
//Action<T>支援16個參數多載<T1.........T16>

delegate 與 Func< T , TResult >

//使用舊的方式
//宣告一個回傳型別為String 的delegate
delegate string ConvertMethod(string inString);

public class DelegateExample
{
   public static void Main()
   {
      ConvertMethod convertMeth = UppercaseString;
      convertMeth.Invoke("Mickey");
   
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}
//使用Func<T,TResult>
//T為方法參數,TResult為回傳型別
public class GenericFunc
{
   public static void Main()
   {
  
      Func<string, string> convertMethod = UppercaseString;
      convertMethod.Invoke("Dakota");
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

這篇文章講完後,大家對於委派delegate 、Action<T> 、Func<T,TResult>應該有基本的認知
當然有Lambda 委派封裝更精簡的寫法,在文章最上面的MSDN內都有範例可以參考
這邊就不多贅述,下一篇來講事件event跟建構式
物件導向課程心得Part4