泛型委派
以上是.Net中內建的泛型委派
Action可以用來取代那些以前我們用過一次就丟掉的delegate
Comparision定義為
public delegate int Comparison<T>(T x, T y);
傳入兩個參數皆為T,並回傳Int
因為傳入兩個參數為同樣型別
一般用來比較大小作為排序的用途
Converter定義為
public delegate TOutput Converter<TInput, TOutput>(TInput input);
做為指定傳入參數與回傳參數
可以用來提供給Array.ConvertAll做整個array的轉換型態method定義
因為Action有提供可以傳入達4種參數的方法
所以小弟也學他定義了
public delegate TOutput ReturnAction<TInput1, TInput2, TOutput>(TInput1 arg1, TInput2 arg2);
public delegate TOutput ReturnAction<TInput1, TInput2, TInput3, TOutput>(TInput1 arg1, TInput2 arg2, TInput3 arg3);
public delegate TOutput ReturnAction<TInput1, TInput2, TInput3, TInput4, TOutput>(TInput1 arg1, TInput2 arg2, TInput3 arg3, TInput4 arg4);
基本上通常只會用到傳入一個參數這個
Test
{
return DateTime.Parse(p);
};
ReturnAction<string, string, string, DateTime> acta = delegate(string yy, string mm, string dd)
{
string parse = yy + "/" + mm + "/" + dd;
return DateTime.Parse(parse);
};
MessageBox.Show(acta("2009", "09", "30").ToString("yyMMdd"));
MessageBox.Show(act("2009/12/31").ToString("yyMMdd"));
EventHandler<TEventArgs>
提供自定義事件當作泛型參數傳入
Predicate定義傳入型別的操作並傳回bool
另外因為Action<T>為任何形態,所以可以
{
MessageBox.Show(p + DateTime.Now.ToString());
});
Action<Action<string>> ii;
ii = new Action<Action<string>>(delegate(Action<string> a)
{
a("ii");
});
at("at");
ii(at);
第7~9其實可以定義更複雜的邏輯
並且將ii定義為property讓其他類別呼叫等等更多變化。