C#簡單委托示例——讓你一看就會的demo


委托

1、 什么是委托?

委托就是具有相同簽名和返回值類型的有序方法列表

它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞

  1. 是一種引用類型
  2. 方法的列表稱為調用列表
  3. 當委托被調用時,它調用列表中的每個方法

如圖:

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;//再向容器里添加改變按鈕標題的方法

小結:委托是面向對象的,它定義方法簽名的類型,可以與具有兼容簽名的任何方法關聯。

我們可以通過委托調用方法。委托用於將方法作為參數傳遞給其他方法。

 

歡迎關注訂閱我的微信公眾平台【熊澤有話說】,更多好玩易學知識等你來取
作者:熊澤-學習中的苦與樂
公眾號:熊澤有話說
出處:https://www.cnblogs.com/xiongze520/p/10238530.html
創作不易,任何人或團體、機構全部轉載或者部分轉載、摘錄,請在文章明顯位置注明作者和原文鏈接。  

 


免責聲明!

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



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