委托 1、 什麼是委托? 委托就是具有相同簽名和返回值類型的有序方法列表 它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞 如圖: 2、 委托的聲明 先來看看委托是如何聲明的 a、委托類型的聲明看上去與方法的聲明很類似,有返回類型和簽名。返回類型和簽名指定了委托接受的方法的形式 b、 ...
委托
1、 什麼是委托?
委托就是具有相同簽名和返回值類型的有序方法列表
它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞
- 是一種引用類型
- 方法的列表稱為調用列表
- 當委托被調用時,它調用列表中的每個方法
如圖:
2、 委托的聲明
先來看看委托是如何聲明的
a、委托類型的聲明看上去與方法的聲明很類似,有返回類型和簽名。返回類型和簽名指定了委托接受的方法的形式
b、委托類型與方法聲明的不同之處:
▲ 委托是以關鍵字delegate開頭的
▲ 委托沒有方法主體
3、 委托的應用
給大家寫個簡單易懂的實例,看完就知道委托時怎麼一回事了
先創建兩個窗體Form1和Form2,點擊Form1中的按鈕彈出Form2,可以在Form2中點擊按鈕改變Form1的背景色
接下來,我們來看看裡面的具體代碼,看看用委托是如何實現的
Form1裡面的代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace delegateWindowsForms { //首先聲明一個無返回值、無參數的委托 public delegate void MyDel(); public partial class Form1 : Form { public Form1() { InitializeComponent(); } //打開第二個視窗 private void button1_Click(object sender, EventArgs e) { MyDel del = new MyDel(ChangeColor); //實例化一個委托,把改變顏色的方法放到容器裡面 del += ChangeButtonText;//再向容器里添加改變按鈕標題的方法 Form2 frm2 = new Form2(del); //把委托擋著參數,傳給frm2。這樣frm2就可以調用了 frm2.ShowDialog(); } //改變第二個視窗背景顏色為紅色 public void ChangeColor() { this.BackColor = Color.Red; } //改變“改變第一個Form”的名稱為”騷年,我已經變色了“ public void ChangeButtonText() { this.button1.Text = "騷年,我已經變色了"; } } }
Form2裡面的代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace delegateWindowsForms { public partial class Form2 : Form { MyDel delChange; public Form2(MyDel del) { InitializeComponent(); this.delChange = del; } //顏色改變按鈕的點擊事件 private void button1_Click(object sender, EventArgs e) { delChange(); //委托調用 } } }
運行代碼,點擊Form1中的按鈕,彈出Form2,
在Form2中點擊改變Form1顏色按鈕,可以發現,Form1的背景色瞬間變為紅色,並且“改變第一個Form”的名稱變為”騷年,我已經變色了“
這樣我們就跨窗體操作了控制項。
仔細觀察以下兩句代碼我們可以知道,如何向委托這個容器添加方法。
當實例化委托後,我們可以用“+=”向委托裡面繼續添加方法;
如代碼中所寫:
MyDel del = new MyDel(ChangeColor); //實例化一個委托,把改變顏色的方法放到容器裡面
del += ChangeButtonText;//再向容器里添加改變按鈕標題的方法
小結:委托是面向對象的,它定義方法簽名的類型,可以與具有相容簽名的任何方法關聯。
我們可以通過委托調用方法。委托用於將方法作為參數傳遞給其他方法。