C#委託理解(1)
# 委託 #
## 1、理解 ##
(1)委託型別用於定義和相應應用程式中的回撥;
(2)使用回撥,程式設計師可以使一個函式 返回報告給(即回撥)另一個函式;
(3)委託是型別安全的物件,它指向程式中另一個以後會被呼叫的的方法。
## 2、定義委託 ##
(1)**使用delegate關鍵字
如:public delegate int XXX(int a,int b);
//定義了一個(可以指向任意方法)、
//(返回一個int型別返回值)、
//(接收兩個int型別輸入引數)的委託型別。
(2)當C#編譯器處理委託型別時,將自動產生一個繼承自System.MulticastDelegate的**密封類XXX**以維護以後將要呼叫方法的列表。
(3)該密封類XXX定義了三個公共方法:
public sealed class XXX : System.MulticastDelegate
{
//以同步方式呼叫委託物件維護的每個方法
public int Invoke(int a,int b);
//以非同步方式開始呼叫委託物件維護的每個方法
public IAsyncResult BeginInvoke(int a,int b,asyncCallback cb,object state);
//以非同步方式結束呼叫委託物件維護的每個方法
public int EndInvoke(IAsyncResult result);
}
## 3、委託例項 ##
//定義部分
public delegate int XXX(int a,int b);
public int Add(int x,int y)
{
return x + y;
}
//以下是控制檯Main方法中的內容
XXX d = new XXX(Add);
Console.writeLine(d(10,11));
//控制檯顯示結果
21
## 1、理解 ##
(1)委託型別用於定義和相應應用程式中的回撥;
(2)使用回撥,程式設計師可以使一個函式 返回報告給(即回撥)另一個函式;
(3)委託是型別安全的物件,它指向程式中另一個以後會被呼叫的的方法。
## 2、定義委託 ##
(1)**使用delegate關鍵字
如:public delegate int XXX(int a,int b);
//定義了一個(可以指向任意方法)、
//(返回一個int型別返回值)、
//(接收兩個int型別輸入引數)的委託型別。
(2)當C#編譯器處理委託型別時,將自動產生一個繼承自System.MulticastDelegate的**密封類XXX**以維護以後將要呼叫方法的列表。
(3)該密封類XXX定義了三個公共方法:
public sealed class XXX : System.MulticastDelegate
{
//以同步方式呼叫委託物件維護的每個方法
public int Invoke(int a,int b);
//以非同步方式開始呼叫委託物件維護的每個方法
public IAsyncResult BeginInvoke(int a,int b,asyncCallback cb,object state);
//以非同步方式結束呼叫委託物件維護的每個方法
public int EndInvoke(IAsyncResult result);
}
## 3、委託例項 ##
//定義部分
public delegate int XXX(int a,int b);
public int Add(int x,int y)
{
return x + y;
}
//以下是控制檯Main方法中的內容
XXX d = new XXX(Add);
Console.writeLine(d(10,11));
//控制檯顯示結果
21
說明:實際上d(10,11)實際上在記憶體中呼叫了Invoke()方法
# 4、泛型委託:Action<>和Func<> #
## 使用委託的三個步驟: ##
1、自定義與方法Add匹配的委託XXX
2、建立委託的例項:XXX d = new XXX(Add);
3、呼叫委託物件的Invoke()方法來間接呼叫Add方法
## 使用Action<>委託: ##
1、建立委託的例項:Action<int,int> d = new Action<int,int>(Add);
2、呼叫委託物件的Invoke()方法來間接呼叫Add方法
缺點:Action<int,int>只能指向void返回值的方法
## 使用Func<>委託: ##
優點:相比Action<>,Func<>同時能指向void返回值的方法;Func<>的最後一個引數總是方法的返回值。
1、建立委託的例項:
Func<int,int,int> d = new Func<int,int,int>(Add);
2、呼叫委託物件的Invoke()方法來間接呼叫Add方法:
相關文章
- C#委託C#
- c#中的委託C#
- c# 委託和事件C#事件
- C# - 委託與事件C#事件
- C#委託與事件C#事件
- C#的委託案例C#
- C# 從1到Core--委託與事件C#事件
- C# 委託(delegate)、泛型委託和Lambda表示式C#泛型
- 瞭解下C# 委託(Delegate)C#
- C#基礎之委託,事件C#事件
- 詳解C#委託與事件C#事件
- C#基礎:泛型委託C#泛型
- C#反射的委託建立器C#反射
- C#基礎委託回顧C#
- 詳解C#委託和事件(二)C#事件
- 詳解C#委託和事件(一)C#事件
- C#規範整理·泛型委託事件C#泛型事件
- C#委託的幾種表現方式C#
- 委託
- # 委託
- 委託與事件-委託詳解(一)事件
- 由C#委託回撥想到的二三事C#
- 關於C#委託三種呼叫的分享C#
- C# 委託原理刨析,外加和事件對比C#事件
- 事件委託事件
- C#深入學習:泛型修飾符in,out、逆變委託型別和協變委託型別C#泛型型別
- 徹底搞清楚c#中的委託和事件C#事件
- 從IL角度徹底理解回撥_委託_指標指標
- Java-委託Java
- 行為委託
- 重學c#系列——委託和匿名函式[二十五]C#函式
- C#快速入門教程(17)—— 委託、事件與Lambda表示式C#事件
- dotnet 委託的實現解析(2)開放委託和封閉委託 (Open Delegates vs. Closed Delegates)
- wpf移除事件委託事件
- 04.委託Delegation
- 委託的好處
- winform實現委託ORM
- UE4委託