標籤:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
///委託是對方法的類型的抽象
///方法的類型是由傳回值、形參個數及類型定義的
///所以委託也通過傳回值、形參個數及類型定義了不同類型的方法
///因為委託是一種類型,也就是類,所以在使用時需要執行個體化。
///委託類型的執行個體對象的應用很靈活,跟普通類的執行個體對象使用方式相同
///可以作為另外一個方法的空殼使用,也可以作為其他方法的參數使用
///之所以稱之為方法的空殼,是因為該執行個體對象不具有真實的商務邏輯能力,
///僅僅是中間的一個經手人而已。如果老師讓小明去打水,小明是瘸子,走動不便,但小明
///有個好朋友小紅,小明就讓小紅去打水,最終水由小紅打回來了。
///這裡,相當於小明就是委託。
namespace delegate_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 定義了一種方法的類型,有int傳回值
/// 有兩個形參,都為int
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public delegate int culculateDelegate(int x, int y);
private void Form1_Load(object sender, EventArgs e)
{
culculateDelegate cd = Added;
MessageBox.Show(dele(cd, 3, 5).ToString());
}
/// <summary>
/// 這個方法滿足委託所定義的方法的類型
/// 他是這樣一種類型的方法,有一個int的傳回值,有兩個形參,都是int型的
/// 這裡,方法的類型,由傳回值、形參個數和形參類型共同決定。
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
private int Added(int a, int b)
{
return a + b;
}
/// <summary>
/// 該方法有三個形參,類型分別為1個委託型(該委託型方法的類型是2個int形參,一個int傳回值),2個int
/// </summary>
/// <param name="cd"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private int dele(culculateDelegate cd, int x, int y)
{
return cd(x, y);
}
}
}
關於C#中委託的一些理解與模仿