C# 委托(什么是委托)

什么是委托

可以認為委托是持有一個或多個方法的對象。當然,一般情況下你不會想要“執行”一個對
象,但委托與典型的對象不同。可以執行委托,這時委托會執行它所“持有"的方法。

本章將揭示創建和使用委托的語法和語義。在本章后面,你將看到如何使用委托將可執行的
代碼從一個方法傳遞到另一個方法,以及為什么這樣做是非常有用的。
我們將從下面的示例代碼開始。如果此時你有些東西弄不明白,不必擔心,本章后面會介紹
委托的細節。

  • 代碼開始部分聲明了一個委托類型MyDel(沒錯,是委托類型不是委托對象。我們很快就
    會介紹這一點)。
  • Program類聲明了3個方法:PrintLow、PrintHigh和Main。接下來要創建的委托對象將
    持有printLow或PrintHigh方法,但到底使用哪個要到運行時才能確定。
  • Main聲明了一個局部變量del,它將持有一個MyDel類型的委托對象的引用。這并不會創
    建對象,只是創建持有委托對象引用的變量,在幾行之后便會創建這個委托對象,并將
    其賦值給這個變量。
  • Main創建了一個Random類的對象,Random是一個隨機數生成器類。接著程序調用該對象
    的Next方法,將99作為方法的輸入參數。這會返回一個介于0到99之間的隨機整數,
    并將這個值保存在局部變量randomvalue中。
  • 下面一行檢查返回并存儲的隨機值是否小于50。(注意,我們使用三元條件運算符來返回
    兩個委托之一。)
    • 如果該值小于50,就創建一個MyDel委托對象并初始化,讓它持有PrintLow方法的引用。
    • 否則,就創建一個持有PrintHigh方法的引用的MyDel委托對象。
  • 最后,Main執行委托對象del,這將執行它持有的方法(或P1intHight)。

說明 如果你有C++背景,理解委托最快的方法是把它看成一個類型安全的、面向對象的C++
函數指針。

delegate void MyDel(int value);    //聲明委托類型class Program
{void PrintLow(int value){Console.WriteLine($"{value}-Low Value");}void PrintHigh(int value){Console.WriteLine($"{value} - High Value");}static void Main(){Program program=new Program();MyDel del;     //聲明委托變量//創建隨機整數生產器對象,并得到0到99之間的一個隨機數Random rand=new Random();int randomValue=rand.Next(99);//創建一個包含PrintLow或PrintHigh的委托對象并將其賦值給del變量del=randomValue<50?new MyDel(program.PrintLow):new MyDel(program.PrintHigh);del(randomValue)//執行委托}
}

由于我們使用了隨機數生成器,程序在不同的運行過程中會產生不同的值。程序運行可能產
生的結果如下:

28 -Low Value

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86062.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iTwin briefcase, checkpoint ,standalone

在 iTwin.js 中&#xff0c;briefcase 和 checkpoint 都是 IModel 的不同連接類型&#xff0c;但它們的用途和特性不同&#xff1a; Briefcase 用途&#xff1a;用于本地編輯和同步。通常是用戶從 iModelHub 檢出&#xff08;Check-out&#xff09;后在本地生成的可寫副本。特…

媒體AI關鍵技術研究

一、引言 隨著人工智能技術的迅猛發展&#xff0c;媒體行業正經歷前所未有的變革。AI技術不僅重塑了內容生產和傳播模式&#xff0c;更為媒體創意發展提供了全新可能。在數字化、移動化和信息爆炸的大背景下&#xff0c;傳統媒體面臨巨大挑戰&#xff0c;而AI技術為行業帶來了…

Cargo 與 Rust 項目

一、Rust 項目&#xff1a;現代化的系統編程單元 Rust 項目 是用 Rust 語言編寫的軟件工程單元&#xff0c;具有以下核心特征&#xff1a; 核心組件&#xff1a; src/ 目錄&#xff1a;存放 Rust 源代碼&#xff08;.rs 文件&#xff09; Cargo.toml&#xff1a;項目清單文件…

uni-app總結6-配合iOS App項目開發apple watch app

假設你已經用uni-app開發好了一個iOS端的app,現在想要開發一個配套的apple watch app。改怎么去開發呢?是不是一頭霧水,這篇文章就會介紹一些apple watch app開發的知識以及如何在uni-app開發的iOS app基礎上去開發配套的watch app。 一、apple watch 開發知識 apple watc…

神經網絡的本質 邏輯回歸 python的動態展示

神經網絡的本質 邏輯回歸 python的動態展示 邏輯回歸運行圖相關代碼什么是邏輯回歸和ai的關系邏輯回歸公式流程與實際案例解析**一、邏輯回歸的數學公式流程**1. **線性組合階段**2. **激活函數&#xff08;Sigmoid&#xff09;**3. **概率預測與決策**4. **交叉熵損失函數**5.…

sql server中的with 鎖各種區別

&#x1f4d8; SQL Server 常用 WITH (Hint) 用法與組合場景對照表 Hint 組合作用說明常見用途是否阻塞他人是否讀臟數據備注WITH (NOLOCK)不加共享鎖&#xff0c;允許讀取未提交數據報表導出、大數據分頁??等價于 READ UNCOMMITTED&#xff0c;臟讀風險高WITH (HOLDLOCK)保持…

KES數據庫部署工具使用

一、啟動部署工具 Windows系統 #命令行 ${安裝目錄}/ClientTools/guitools/DeployTools/deploy.exeLinux系統 #命令行 [rootnode ~]# ${安裝目錄}/ClientTools/guitools/DeployTools/deploy二、環境配置 1.硬件要求 #都是最小配置 CPU&#xff1a;主流32或64位 內存&#…

TB62211FNG是一款采用時鐘輸入控制的PWM斬波器的兩相雙極步進電機驅動器

TB62211FNG是一款采用時鐘輸入控制的PWM斬波器的兩相雙極步進電機驅動器。該器件采用BiCD工藝制造&#xff0c;額定電壓為40伏/1.0安培。片上電壓調節器允許使用單一VM電源控制步進電機。 特點&#xff1a; ? 雙極性步進電機驅動器 ? 脈沖寬度調制&#xff08;PWM&#xf…

uni-app項目實戰筆記24--uniapp實現圖片保存到手機相冊

前提條件&#xff1a;微信小程序要想實現保存圖片到本地相冊需要到微信公眾平臺--小程序--開發管理中配置服務器域名中的downloadFile合法域名&#xff1a; \uniapp提供了saveImageToPhotosAlbum API實現保存的圖片到本地相冊。下面是它的配置參數&#xff1a; 參數名類型必填…

面試題-定義一個函數入參數是any類型,返回值是string類型,如何寫出這個函數,代碼示例

在 TypeScript 里&#xff0c;要定義一個入參為any類型、返回值為string類型的函數&#xff0c;可參考下面幾種實現方式&#xff1a; 1. 基礎實現 直接把入參轉換為字符串返回。 function anyToString(input: any): string {return String(input); // 使用String()進行類型轉…

TensorFlow深度學習實戰——Transformer模型評價指標

TensorFlow深度學習實戰——Transformer模型評價指標 0. 前言1. 質量1.1 GLUE1.2 SuperGLUE1.3 SQuAD1.4 RACE1.5 NLP-progress2. 參數規模3. 服務成本相關鏈接0. 前言 可以使用多種類型的指標評估 Transformer 模型。在本節中,我們將學習一些用于評估 Transformer 的關鍵因素…

linux內核學習(一)---內核社區介紹及補丁提交

目錄 一、引言 二、內核源碼 三、內核社區 ------>3.1、社區的組織架構 ------>3.2、內核社區的工作方式 ------>3.3、內核社區核心網站 ------------>3.3.1、Linux Kernel 官網 ------------>3.3.2、Linux Kernel 郵件列表(LKML) ------------>3.3…

輕量級web開發框架之Flask web開發框架學習:get請求數據的發送

Flask是一個使用 Python 編寫的輕量級 Web 應用框架&#xff0c;簡介靈活&#xff0c;可快速構建開發框架。 協作流程示例 客戶端請求 → Web服務器&#xff08;Nginx&#xff09; → WSGI服務器&#xff08;Gunicorn/uWSGI&#xff09;↓WSGI協議傳遞請求數據&#xff08;env…

Vue 3 異步三劍客:Suspense、async setup() 和 await 的戲劇性關系,白屏的解決

文章目錄 &#x1f3ad; Vue 3 異步三劍客&#xff1a;Suspense、async setup() 和 await 的戲劇性關系&#xff0c;白屏的解決&#x1f3ac; 角色介紹&#x1f3ad; 正常演出流程&#xff08;有 Suspense 時&#xff09;&#x1f4a5; 災難場景&#xff08;缺少 Suspense 時&a…

【JavaScript-Day 48】告別 Ajax,擁抱現代網絡請求:Fetch API 完全指南

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

BUUCTF在線評測-練習場-WebCTF習題[極客大挑戰 2019]Knife1-flag獲取、解析

解題思路 這題沒有什么解題思路&#xff0c;打開靶場&#xff0c;標題是白給的shell 頁面顯示了 eval($_POST["Syc"]); 這是php webshell命令&#xff0c;密碼為Syc&#xff0c;可直接通過該命令連接&#xff0c;根據標題提示&#xff0c;直接嘗試用蟻劍連接 連接成…

Qt—(Qt線程,Qt進程,,QT與sqlite數據庫)

一 Qt線程與進程概述 線程與進程對比 特性線程 (QThread)進程 (QProcess)內存空間共享父進程內存獨立內存空間創建開銷小 (幾MB)大 (幾十MB)通信方式共享內存/信號槽管道/套接字/文件崩潰影響導致整個進程終止僅自身終止適用場景高并發任務、計算密集型隔離第三方應用、安全需求…

計算機視覺階段一:CV入門基礎

目錄 學習目標&#xff1a; 一、核心知識點 二、實用工具推薦 三、學習內容與步驟 1.環境搭建 2.圖像獲取與顯示 3 圖像基礎處理 4 圖像幾何變換 5 圖像像素操作 四、實戰任務建議 實戰 1&#xff1a;圖像加載 顯示 保存 實戰 2&#xff1a;灰度圖 邊緣檢測 圖…

新增MCP接入和AutoAgent,漢得靈猿AI中臺1.6版正式發布!

漢得靈猿&#xff08;大圣&#xff09;AI中臺1.6版本&#xff0c;經過數月迭代&#xff0c;現已正式發布&#xff01; 新版本最被期待的新功能&#xff0c;無疑是4月份預告的MCP接入&#xff0c;而令人同樣激動的另一項新功能&#xff0c;則是AutoAgent動態規劃智能體。除了兩…

總結匯報思路

一、明確匯報目標 受眾需求&#xff1a;領導/客戶/團隊最關心什么&#xff1f;&#xff08;結果&#xff1f;問題&#xff1f;下一步計劃&#xff1f;&#xff09; 核心目的&#xff1a;展示成果&#xff1f;爭取資源&#xff1f;總結經驗&#xff1f;解決問題&#xff1f; 時…