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#自學(一)委託(delegate)、委託泛型、多播委託C#泛型
- C# 事件委託C#事件
- C#委託(delegate)C#
- C# 委託事件C#事件
- C#的委託案例C#
- C#委託與事件C#事件
- c# 委託測試C#
- C#再識委託C#
- C# 事件 vs 委託C#事件
- C#中的委託C#
- C# 委託(delegate)、泛型委託和Lambda表示式C#泛型
- C# 從1到Core--委託與事件C#事件
- 瞭解下C# 委託(Delegate)C#
- C# 之委託與事件C#事件
- 什麼是委託(C#)C#
- zt 對C#下函式,委託,事件的一點理解!C#函式事件
- C#基礎:泛型委託C#泛型
- C#基礎委託回顧C#
- C#反射的委託建立器C#反射
- C#:委託和自定義事件C#事件
- C#委託使用詳解(Delegates)C#
- C# 委託(Delegates)使用詳解C#
- C# 中的委託和事件C#事件
- C#委託的非同步呼叫C#非同步
- 詳解C#委託和事件(一)C#事件
- 詳解C#委託和事件(二)C#事件
- C#中的委託和事件(續)C#事件
- 委託、事件--委託例項篇事件
- C#基礎系列:委託實現簡單設計模式(1)C#設計模式
- 五分鐘重溫C#委託,匿名方法,Lambda,泛型委託,表示式樹C#泛型
- 委託與事件-委託詳解(一)事件
- C#規範整理·泛型委託事件C#泛型事件
- C#委託的幾種表現方式C#
- C#委託回撥的一個例子C#
- C# 委託,事件和Lambda表示式 (轉)C#事件
- .net的委託和事件的直接理解 (轉)事件
- 委託、Lambda表示式、事件系列04,委託鏈是怎樣形成的, 多播委託, 呼叫委託鏈方法,委託鏈異常處理事件