泛型委派

泛型委派

Action 泛型委派

Comparison 泛型委派

Converter 泛型委派

EventHandler 泛型委派

Predicate 泛型委派

以上是.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讓其他類別呼叫等等更多變化。