上一篇講到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