C#委托的用法


委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞。事件是一種特殊的委托。

1.委托的聲明

 Delegate 類

    Delegate是一種引用類型,我們在處理他的時候要當作類來看待而不是方法,說白了委托就是對方法或者方法列表的引用,調用一個委托實例就好像是調用c++中的指針一    樣,他封裝了對制定方法的引用,或者說委托起到的是橋梁的作用,實例后的委托對象會將給定的參數傳遞給他所回調的方法,並去執行方法。

    Delegate至少0個參數,至多32個參數,可以無返回值,也可以指定返回值類型。

    例:public delegate int MethodtDelegate(int x, int y);表示有兩個參數,並返回int型。

public delegate void myDelegate(string str);  
public static void HellowChinese(string strChinese)  
{  
    Console.WriteLine("Good morning," + strChinese);  
    Console.ReadLine();  
}  
  
myDelegate d = new myDelegate(HellowChinese);  
d("Mr wang"); 

匿名方法

 

 

 

 

C#中幾個常用的委托(Action,Func,predicate)

Action

       Action是無返回值的泛型委托。

   Action 表示無參,無返回值的委托

   Action<int,string> 表示有傳入參數int,string無返回值的委托

   Action<int,string,bool> 表示有傳入參數int,string,bool無返回值的委托

       Action<int,int,int,int> 表示有傳入4個int型參數,無返回值的委托

   Action至少0個參數,至多16個參數,無返回值。

public delegate void Action<in T1, in T2, in T3, in T4>(
	T1 arg1,
	T2 arg2,
	T3 arg3,
	T4 arg4
)

Action是對委托的使用的簡化:

public static void HellowChinese(string strChinese)  
{  
    Console.WriteLine("Good morning," + strChinese);  
    Console.ReadLine();  
}  
  
Action<string> action = HellowChinese;  
action("Spring.");  

Func

   Func是有返回值的泛型委托

   Func<int> 表示無參,返回值為int的委托

   Func<object,string,int> 表示傳入參數為object, string 返回值為int的委托

   Func<object,string,int> 表示傳入參數為object, string 返回值為int的委托

   Func<T1,T2,,T3,int> 表示傳入參數為T1,T2,,T3(泛型)返回值為int的委托

   Func至少0個參數,至多16個參數,根據返回值泛型返回。必須有返回值,不可void

public delegate TResult Func<in T1, in T2, in T3, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3
)

Func也是對委托的使用的簡化:

public static string HelloEnglish(string strEnglish)  
{  
    return "Hello." + strEnglish;  
}  
  
Func<string, string> f = HelloEnglish;  
Console.WriteLine(f("Srping ji"));  
Console.ReadLine();  

predicate

   predicate 是返回bool型的泛型委托

   predicate<int> 表示傳入參數為int 返回bool的委托

   Predicate有且只有一個參數,返回值固定為bool

public delegate bool Predicate<in T>(
    T obj
)

 

 

2.總結

委托類似於 C++ 函數指針,但它們是類型安全的。
委托允許將方法作為參數進行傳遞。
委托可用於定義回調方法。
委托可以鏈接在一起;例如,可以對一個事件調用多個方法。
方法不必與委托簽名完全匹配。

Delegate至少0個參數,至多32個參數,可以無返回值,也可以指定返回值類型

Func可以接受0個至16個傳入參數,必須具有返回值

Action可以接受0個至16個傳入參數,無返回值

Predicate只能接受一個傳入參數,返回值為bool類型

使用Func<T,TResult>和Action<T>,Action而不使用Delegate其實都是為了簡化代碼,使用更少的代碼達到相同的效果,不需要我們顯示的聲明一個委托。

Func<T,TResult>的最后一個參數始終是返回類型,而Action<T>是沒有返回類型的,而Action是沒有返回類型和參數輸入的。

predicate<T> 使用的比較少。

參考 :https://msdn.microsoft.com/zh-cn/library/bb549430(v=vs.110).aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM