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

来源:https://www.cnblogs.com/xiongze520/archive/2019/01/08/10238530.html
-Advertisement-
Play Games

委托 1、 什麼是委托? 委托就是具有相同簽名和返回值類型的有序方法列表 它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞 如圖: 2、 委托的聲明 先來看看委托是如何聲明的 a、委托類型的聲明看上去與方法的聲明很類似,有返回類型和簽名。返回類型和簽名指定了委托接受的方法的形式 b、 ...


委托

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

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

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般來講,我們的網頁導航欄是這麼個模式來構建在結構上:1.首先我們需要給導航欄的div 給個類名 一般為nav2.然後就是一個無序表格 3.由於導航欄的文字一般都是鏈接用來跳轉頁面 要在li裡面包含一個a 在樣式上: 目前我見過的分為兩種導航欄的文字 裸露 也就是沒有滑動門的那種比如這種 1.首先寫 ...
  • 先看一下wxml的代碼,綁定個事件! 然後是js的代碼,調用wx.chooseLocation方法 ...
  • 首先,在進行認識深拷貝和淺拷貝之前,我們需要瞭解到W3關於數據類型的區分 數據類型: 基本類型:String/Number/Boolean/Null/undefined/Symbol/ 直接存儲在棧中的數據 引用類型:Object,Array等 存儲的時是對象在棧中的引用,真實的數據存放在堆記憶體里 ...
  • 在網頁開發中,常常會遇見很多Tab切換,Tab切換增加網頁瀏覽的舒適性,對於開發人員特別常見,本文使用JS實現tab切換效果,僅對學習中遇到的知識點做一個總結。 效果圖如下: 實現思路: 1.首先使用HTML和CSS構建靜態網頁如上,標題使用ul-li標簽,有浮動,主體使用四個大小一樣的盒子,不添加 ...
  • 這幾天在項目中遇到,一個難點, 就是需要非同步載入一個pdf插件, 同時又需要獲取這個插件中的點擊事件來生成用戶的下載記錄. 剛開始也是想了很多方法,網上搜的 發現在跨域環境下並沒有用, 看到有些人說這個無解, 需要走後臺, 我當時也是涼涼感覺. 後來自己也是想了辦法,在插件頁面中給按鈕綁定事件,然後 ...
  • 1、長度 2、角度 3、時間 4、解析度 5、顏色 6、函數 7、生成內容 8、圖像 9、數字 1、長度 <length>:數字和單位之間沒有空格,0之後的長度單位是可選的 相對長度單位 em:相對於字體大小 ex:相對於小寫字母"x"的高度,對於很多字體,1ex ≈ 0.5em ch:相對於數字" ...
  • 1、CSS語法 2、@規則 3、註釋 4、層疊 5、優先順序 6、繼承 7、值 8、塊格式化上下文 9、盒模型 10、層疊上下文 11、可替換元素 12、外邊距合併 13、包含塊 14、視覺格式化模型 15、佈局模式 1、CSS語法 屬性:property 值:value CSS聲明:property ...
  • 在面向對象當中繼承是非常重要的,也是面向對象的三大特性之一(繼承、封裝、多態),今天我們來揭開他的神秘面紗。 話不多說,我們上菜。 寫好代碼後我們運行看看效果! 很顯然看出來,公司兩個程式員都繼承了程式員類。 總結: 父類包含了多少內容,派生類(子類)全部接受(包括屬性 欄位 方法等), 可以重寫覆 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...