日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# Delegate委托:解鎖代碼靈活交互的關(guān)鍵

admin
2025年2月6日 19:12 本文熱度 519

一、從 “老板來了” 的故事說起

想象一下這樣的場景:在一個(gè)忙碌的辦公室里,大家表面上都在認(rèn)真工作,實(shí)則不少人在偷偷摸魚。有人在刷短視頻,有人在逛購物網(wǎng)站,還有人在和朋友偷偷聊天。突然,門口傳來一聲 “老板來了”,瞬間,所有人都迅速切換回工作狀態(tài),假裝一直在努力工作。

在這個(gè)場景中,“老板來了” 就是一個(gè)通知,而每個(gè)打工人聽到通知后停止摸魚、回歸工作的行為,就像是一個(gè)個(gè)被觸發(fā)執(zhí)行的方法。在 C# 中,委托(Delegate)就扮演著這樣一個(gè) “通知者” 的角色,它可以將方法作為參數(shù)進(jìn)行傳遞,當(dāng)某個(gè)特定的事件發(fā)生時(shí),就可以調(diào)用委托所指向的方法,就如同 “老板來了” 的通知觸發(fā)了打工人停止摸魚的行為一樣 。是不是感覺委托有點(diǎn)意思了?接下來,我們就深入了解一下 C# 中的委托到底是什么。

二、揭開委托的神秘面紗

(一)委托的定義與本質(zhì)

在 C# 的編程世界里,委托(Delegate)可以被看作是一種特殊的 “使者”。從定義上來說,委托是一種引用類型,它類似于 C 或 C++ 中的函數(shù)指針,但又有著本質(zhì)的區(qū)別。委托是類型安全的,這意味著在使用委托時(shí),編譯器會確保委托所引用的方法簽名與委托的定義相匹配,避免了像函數(shù)指針那樣可能出現(xiàn)的類型不匹配導(dǎo)致的錯(cuò)誤 。

委托可以持有對一個(gè)或多個(gè)方法的引用,就像是一個(gè) “方法容器”,可以將方法當(dāng)作 “物品” 裝進(jìn)去。而且,這個(gè) “容器” 里的方法引用可以在運(yùn)行時(shí)動(dòng)態(tài)地改變。例如,在一個(gè)游戲開發(fā)中,我們可以定義一個(gè)委托來表示角色的攻擊行為,在游戲的不同階段或者根據(jù)不同的游戲條件,將不同的攻擊方法(如近戰(zhàn)攻擊、遠(yuǎn)程攻擊、魔法攻擊等)賦值給這個(gè)委托,從而實(shí)現(xiàn)角色攻擊行為的動(dòng)態(tài)變化。

用代碼來定義一個(gè)委托,就像這樣:

// 定義一個(gè)委托類型,它指向的方法需要接受一個(gè)int類型的參數(shù),并且返回void

public delegate void MyDelegate(int value);

這里,MyDelegate就是我們定義的委托類型,它定義了一種方法的 “模板”,只要方法的簽名(參數(shù)列表和返回值類型)與這個(gè)委托定義一致,就可以被這個(gè)委托所引用 。

(二)委托與普通方法的區(qū)別

委托和普通方法雖然都與方法相關(guān),但它們之間存在著明顯的區(qū)別,就像汽車和自行車,雖然都能帶你到達(dá)目的地,但它們的功能和使用方式有很大不同。

普通方法就像是固定在某個(gè)位置的服務(wù)點(diǎn),它的調(diào)用是直接且明確的,在代碼中通過方法名來直接調(diào)用,調(diào)用者必須清楚地知道這個(gè)方法的具體實(shí)現(xiàn)和位置。而委托更像是一個(gè)靈活的 “快遞員”,它可以將方法當(dāng)作 “包裹” 傳遞給其他方法 。通過委托,我們可以在運(yùn)行時(shí)動(dòng)態(tài)地決定調(diào)用哪個(gè)方法,這就實(shí)現(xiàn)了方法的間接調(diào)用。比如,在一個(gè)圖形繪制系統(tǒng)中,我們可以定義一個(gè)委托來表示繪制圖形的操作,然后根據(jù)用戶選擇的圖形類型(圓形、方形、三角形等),將相應(yīng)的繪制方法賦值給委托,這樣就可以通過委托來調(diào)用不同的繪制方法,而不需要在代碼中寫大量的條件判斷語句來直接調(diào)用不同的繪制方法。

從多態(tài)性的角度來看,委托也展現(xiàn)出了獨(dú)特的優(yōu)勢。普通方法的多態(tài)性主要通過虛方法、抽象方法和接口來實(shí)現(xiàn),而委托可以實(shí)現(xiàn)一種更靈活的多態(tài)。一個(gè)委托可以同時(shí)引用多個(gè)方法,當(dāng)調(diào)用這個(gè)委托時(shí),這些方法會按照順序依次執(zhí)行,這就是多播委托。例如,在一個(gè)游戲的事件處理系統(tǒng)中,當(dāng)玩家觸發(fā)某個(gè)事件(如獲得道具)時(shí),可能需要同時(shí)執(zhí)行多個(gè)操作(如播放音效、更新玩家屬性、記錄日志等),我們可以將這些操作方法添加到一個(gè)委托中,當(dāng)事件發(fā)生時(shí),只需要調(diào)用這個(gè)委托,就可以一次性執(zhí)行所有相關(guān)的方法,而如果使用普通方法,就需要分別調(diào)用每個(gè)方法,代碼會顯得繁瑣且不靈活。

三、委托的基本使用方法

了解了委托的概念和特點(diǎn)后,接下來我們就來看看委托在 C# 中是如何使用的,掌握這些基本操作,你就能在代碼中靈活運(yùn)用委托來實(shí)現(xiàn)各種強(qiáng)大的功能。

(一)聲明委托

在 C# 中,聲明委托就像是定義一種特殊的 “方法模板”,使用delegate關(guān)鍵字來創(chuàng)建。它的語法格式如下:

[訪問修飾符] delegate 返回值類型 委托名稱(參數(shù)列表);

其中,訪問修飾符是可選的,用于控制委托的訪問級別,常見的有public、private、internal等;返回值類型指定了委托所引用方法的返回值類型;委托名稱是我們給這個(gè)委托取的名字,要符合 C# 的命名規(guī)范;參數(shù)列表則定義了委托所引用方法的參數(shù)類型和個(gè)數(shù) 。

舉個(gè)例子,假如我們有一個(gè)需求,要定義一個(gè)委托來表示發(fā)送消息的操作,代碼可以這樣寫:

public delegate void SendMessageDelegate(string message);

在這個(gè)例子中,SendMessageDelegate就是我們聲明的委托類型,它表示的方法需要接受一個(gè)string類型的參數(shù)message,并且返回值類型為void,也就是不返回任何值。這個(gè)委托定義了一種 “模板”,只要方法的簽名(參數(shù)列表和返回值類型)與它一致,就可以被這個(gè)委托所引用 。

(二)實(shí)例化委托

聲明委托之后,就需要?jiǎng)?chuàng)建委托的實(shí)例,也就是將委托與具體的方法關(guān)聯(lián)起來,就像給 “快遞員”(委托)安排具體的 “包裹”(方法)派送任務(wù)。在 C# 中,我們使用new關(guān)鍵字來實(shí)例化委托,語法如下:

委托類型 委托實(shí)例名 = new 委托類型(方法名);

還是以上面發(fā)送消息的委托為例,假設(shè)我們有一個(gè)具體的方法SendEmail來實(shí)現(xiàn)發(fā)送郵件的功能,代碼如下:

public void SendEmail(string message)

{

  Console.WriteLine($"發(fā)送郵件: {message}");

}

那么,我們可以這樣實(shí)例化委托:

SendMessageDelegate sendEmailDelegate = new SendMessageDelegate(SendEmail);

這里,sendEmailDelegate就是我們創(chuàng)建的委托實(shí)例,它關(guān)聯(lián)了SendEmail方法。通過這個(gè)委托實(shí)例,我們就可以調(diào)用SendEmail方法,就像直接調(diào)用方法一樣,只不過現(xiàn)在是通過委托來間接調(diào)用 。

在 C# 2.0 及以上版本中,還可以使用更簡潔的方式來實(shí)例化委托,直接將方法名賦值給委托變量,而不需要使用new關(guān)鍵字,如下所示:

SendMessageDelegate sendEmailDelegate = SendEmail;

這兩種方式的效果是一樣的,都實(shí)現(xiàn)了委托的實(shí)例化和與方法的關(guān)聯(lián) 。

(三)調(diào)用委托

當(dāng)我們實(shí)例化委托并將其與方法關(guān)聯(lián)后,就可以通過委托來調(diào)用關(guān)聯(lián)的方法了。調(diào)用委托非常簡單,就像調(diào)用普通方法一樣,直接使用委托實(shí)例名加上參數(shù)列表即可,例如:

sendEmailDelegate("這是一封重要的郵件");

這段代碼執(zhí)行后,會調(diào)用SendEmail方法,并將 “這是一封重要的郵件” 作為參數(shù)傳遞給它,最終在控制臺輸出 “發(fā)送郵件:這是一封重要的郵件” 。

除了直接調(diào)用委托,還可以使用Invoke方法來調(diào)用委托,效果是一樣的,代碼如下:

sendEmailDelegate.Invoke("這是一封重要的郵件");

通常情況下,直接調(diào)用委托的方式更加簡潔直觀,而Invoke方法在某些特殊場景下會更有用,比如在需要通過反射來調(diào)用委托的情況下 。但在大多數(shù)日常編程中,我們更傾向于直接調(diào)用委托 。

四、多播委托:一次調(diào)用多個(gè)方法

在 C# 的委托世界里,多播委托是一個(gè)非常強(qiáng)大且有趣的特性,它允許我們在一個(gè)委托實(shí)例中綁定多個(gè)方法,當(dāng)調(diào)用這個(gè)委托時(shí),這些綁定的方法會按照順序依次被執(zhí)行,就像給一群小伙伴安排了一系列任務(wù),只要一聲令下,他們就會按順序逐個(gè)完成自己的任務(wù) 。

(一)多播委托的概念

多播委托,簡單來說,就是一個(gè)委托可以同時(shí)引用多個(gè)方法,而不僅僅是一個(gè)。在實(shí)際編程中,這種特性非常有用。比如在一個(gè)游戲開發(fā)中,當(dāng)玩家完成一個(gè)關(guān)卡時(shí),可能需要同時(shí)執(zhí)行多個(gè)操作,如播放慶祝音效、增加玩家積分、解鎖新的關(guān)卡內(nèi)容等。我們可以將這些操作方法都添加到一個(gè)多播委托中,當(dāng)玩家完成關(guān)卡這個(gè)事件觸發(fā)時(shí),只需要調(diào)用這個(gè)多播委托,就可以一次性執(zhí)行所有相關(guān)的操作,而不需要分別調(diào)用每個(gè)方法,大大提高了代碼的效率和可讀性 。

從技術(shù)角度來看,多播委托是通過+和+=運(yùn)算符來添加方法,通過-和-=運(yùn)算符來移除方法的。當(dāng)我們使用+=將一個(gè)方法添加到多播委托中時(shí),實(shí)際上是在委托內(nèi)部維護(hù)的一個(gè)方法列表中增加了一個(gè)新的方法引用 。而調(diào)用多播委托時(shí),委托會按照方法添加的順序依次調(diào)用列表中的每個(gè)方法。需要注意的是,多播委托通常用于返回值類型為void的情況,因?yàn)槿绻杏蟹祷刂担谡{(diào)用多個(gè)方法時(shí),無法確定應(yīng)該返回哪個(gè)方法的結(jié)果,會導(dǎo)致邏輯混亂 。

(二)多播委托的使用示例

為了更好地理解多播委托的使用,我們來看一個(gè)實(shí)際的例子。假設(shè)我們正在開發(fā)一個(gè)日志系統(tǒng),需要記錄不同類型的日志,如信息日志、錯(cuò)誤日志和調(diào)試日志。我們可以定義一個(gè)多播委托,將不同類型的日志記錄方法添加到這個(gè)委托中,這樣當(dāng)有日志需要記錄時(shí),只需要調(diào)用這個(gè)委托,就可以同時(shí)執(zhí)行多個(gè)日志記錄操作 。

首先,我們定義一個(gè)委托類型和幾個(gè)日志記錄方法,代碼如下:

// 定義一個(gè)日志記錄委托,接受一個(gè)字符串參數(shù),返回值為void

public delegate void LogDelegate(string message);

public class Logger

{

// 記錄信息日志的方法

    public void LogInfo(string message)

    {

        Console.WriteLine($"Info: {message}");

    }

// 記錄錯(cuò)誤日志的方法

    public void LogError(string message)

    {

        Console.WriteLine($"Error: {message}");

    }

// 記錄調(diào)試日志的方法

    public void LogDebug(string message)

    {

        Console.WriteLine($"Debug: {message}");

    }

}

然后,我們在主程序中使用這個(gè)多播委托,代碼如下:

class Program

{

    static void Main()

    {

        Logger logger = new Logger();

// 創(chuàng)建一個(gè)多播委托實(shí)例

        LogDelegate logDelegate = null;

// 添加日志記錄方法到多播委托中

        logDelegate += logger.LogInfo;

        logDelegate += logger.LogError;

        logDelegate += logger.LogDebug;

// 調(diào)用多播委托,記錄日志

        string logMessage = "這是一條測試日志";

        logDelegate(logMessage);

// 移除某個(gè)日志記錄方法

        logDelegate -= logger.LogDebug;

// 再次調(diào)用多播委托,此時(shí)不會再執(zhí)行LogDebug方法

        logDelegate(logMessage);

    }

}

在這段代碼中,我們首先定義了一個(gè)LogDelegate委托類型,它接受一個(gè)string類型的參數(shù),返回值為void。然后在Logger類中定義了三個(gè)日志記錄方法:LogInfo、LogError和LogDebug 。在Main方法中,我們創(chuàng)建了一個(gè)Logger類的實(shí)例logger,并聲明了一個(gè)LogDelegate類型的變量logDelegate,初始值為null 。接著,我們使用+=運(yùn)算符將三個(gè)日志記錄方法添加到logDelegate中,這樣logDelegate就成為了一個(gè)多播委托,包含了三個(gè)方法的引用 。當(dāng)我們調(diào)用logDelegate(logMessage)時(shí),會依次執(zhí)行LogInfo、LogError和LogDebug方法,在控制臺輸出相應(yīng)的日志信息 。之后,我們使用-=運(yùn)算符從logDelegate中移除了LogDebug方法,再次調(diào)用logDelegate(logMessage)時(shí),就只會執(zhí)行LogInfo和LogError方法,不再執(zhí)行LogDebug方法 。

通過這個(gè)例子,我們可以清晰地看到多播委托的使用方法和優(yōu)勢,它使得我們可以方便地管理和調(diào)用多個(gè)相關(guān)的方法,讓代碼更加簡潔和靈活 。

五、委托在實(shí)際項(xiàng)目中的應(yīng)用

(一)事件處理

在 C# 的實(shí)際項(xiàng)目開發(fā)中,委托在事件處理方面有著廣泛的應(yīng)用,尤其是在圖形用戶界面(GUI)開發(fā)中,比如 Windows Forms 或 WPF 應(yīng)用程序。以按鈕點(diǎn)擊事件為例,我們來深入了解委托在其中的作用 。

在一個(gè) Windows Forms 應(yīng)用程序中,當(dāng)我們創(chuàng)建一個(gè)按鈕時(shí),按鈕的點(diǎn)擊事件Click本質(zhì)上就是基于委托來實(shí)現(xiàn)的。我們可以將按鈕點(diǎn)擊后要執(zhí)行的操作方法注冊到這個(gè)事件中,當(dāng)按鈕被點(diǎn)擊時(shí),這些注冊的方法就會被調(diào)用 。

首先,定義一個(gè)按鈕點(diǎn)擊事件的處理方法,例如:

private void Button_Click(object sender, EventArgs e)

{

  MessageBox.Show("按鈕被點(diǎn)擊了!");

}

在這個(gè)方法中,sender參數(shù)表示觸發(fā)事件的對象,也就是按鈕本身;EventArgs參數(shù)包含了與事件相關(guān)的一些數(shù)據(jù),在簡單的按鈕點(diǎn)擊事件中,這個(gè)參數(shù)可能沒有太多實(shí)際的數(shù)據(jù),但在其他復(fù)雜事件中,它可以攜帶很多有用的信息 。

然后,我們需要將這個(gè)方法注冊到按鈕的Click事件中,代碼如下:

Button myButton = new Button();

myButton.Click += Button_Click;

這里,使用+=運(yùn)算符將Button_Click方法注冊到myButton的Click事件中,Click事件本質(zhì)上是一個(gè)委托類型,它可以包含多個(gè)方法的引用,當(dāng)按鈕被點(diǎn)擊時(shí),會調(diào)用這個(gè)委托,進(jìn)而執(zhí)行所有注冊到這個(gè)委托中的方法 。

當(dāng)用戶在界面上點(diǎn)擊按鈕時(shí),就會觸發(fā)按鈕的Click事件,此時(shí),注冊到該事件的Button_Click方法就會被執(zhí)行,彈出一個(gè)顯示 “按鈕被點(diǎn)擊了!” 的消息框 。

通過委托實(shí)現(xiàn)的事件處理機(jī)制,使得代碼具有良好的可擴(kuò)展性和維護(hù)性。如果我們需要在按鈕點(diǎn)擊時(shí)執(zhí)行多個(gè)不同的操作,只需要將這些操作方法都注冊到Click事件中即可,而不需要在按鈕點(diǎn)擊的處理代碼中寫大量的條件判斷和重復(fù)代碼 。

(二)回調(diào)機(jī)制

委托在回調(diào)機(jī)制中的應(yīng)用也非常常見,尤其是在異步操作中。當(dāng)我們執(zhí)行一些耗時(shí)的異步操作,如網(wǎng)絡(luò)請求、文件讀取等,我們不希望主線程被阻塞,而是希望在異步操作完成后,能夠執(zhí)行一些特定的處理邏輯,這時(shí)候就可以使用委托來實(shí)現(xiàn)回調(diào)機(jī)制 。

例如,在一個(gè)文件讀取的場景中,假設(shè)我們有一個(gè)方法ReadFileAsync用于異步讀取文件內(nèi)容,代碼如下:

public void ReadFileAsync(string filePath, Action<string> callback)

{

    Task.Run(() =>

    {

// 模擬異步讀取文件,這里使用Task.Delay來模擬讀取文件的延遲

        Task.Delay(2000).Wait();

        string content = File.ReadAllText(filePath);

// 讀取完成后,調(diào)用回調(diào)方法,并將文件內(nèi)容作為參數(shù)傳遞

        callback(content);

    });

}

在這個(gè)方法中,filePath是要讀取的文件路徑,callback是一個(gè)委托類型的參數(shù),它指向一個(gè)接受string類型參數(shù)且無返回值的方法,這個(gè)方法就是我們在文件讀取完成后要執(zhí)行的回調(diào)方法 。

然后,我們可以這樣使用這個(gè)方法:

string filePath = "test.txt";

ReadFileAsync(filePath, (content) =>

{

Console.WriteLine("文件內(nèi)容:" + content);

});

Console.WriteLine("開始異步讀取文件,主線程可以繼續(xù)執(zhí)行其他任務(wù)...");

在這段代碼中,我們調(diào)用ReadFileAsync方法,傳入文件路徑和一個(gè)匿名方法作為回調(diào)。當(dāng)ReadFileAsync方法中的異步讀取文件操作完成后,會調(diào)用傳入的回調(diào)方法,并將讀取到的文件內(nèi)容作為參數(shù)傳遞給回調(diào)方法 。在回調(diào)方法中,我們將文件內(nèi)容輸出到控制臺 。而在調(diào)用ReadFileAsync方法后,主線程不會等待文件讀取完成,而是繼續(xù)執(zhí)行后面的代碼,輸出 “開始異步讀取文件,主線程可以繼續(xù)執(zhí)行其他任務(wù)...”,這就體現(xiàn)了異步操作和回調(diào)機(jī)制的優(yōu)勢,提高了程序的響應(yīng)性和效率 。

六、委托與其他相關(guān)概念的關(guān)系

(一)委托與事件

在 C# 中,事件是基于委托的一種特殊機(jī)制,它就像是委托的 “升級版”,主要用于實(shí)現(xiàn)發(fā)布 - 訂閱模式。在這種模式下,一個(gè)對象(發(fā)布者)可以通知其他對象(訂閱者)某些事情發(fā)生了。

從定義上來說,委托是一種類型安全的函數(shù)指針,可以保存對具有特定簽名和返回類型的方法的引用 ,而事件是基于委托的一種特殊成員,它表示某個(gè)動(dòng)作或狀態(tài)的發(fā)生。例如,在一個(gè)游戲開發(fā)中,當(dāng)玩家的生命值發(fā)生變化時(shí),就可以通過事件來通知其他相關(guān)的系統(tǒng)(如界面顯示系統(tǒng)、音效系統(tǒng)等),讓它們做出相應(yīng)的反應(yīng) 。

在使用場景方面,委托更側(cè)重于方法的傳遞和調(diào)用,它可以在不同的方法之間靈活地傳遞方法引用,實(shí)現(xiàn)方法的動(dòng)態(tài)調(diào)用 。而事件則主要用于實(shí)現(xiàn)對象之間的通信和交互,當(dāng)某個(gè)特定的事件發(fā)生時(shí),通知相關(guān)的對象執(zhí)行相應(yīng)的操作 。比如,在一個(gè)電商系統(tǒng)中,當(dāng)用戶完成訂單支付時(shí),會觸發(fā)一個(gè) “支付成功” 事件,這個(gè)事件可以通知庫存系統(tǒng)減少相應(yīng)商品的庫存,通知物流系統(tǒng)準(zhǔn)備發(fā)貨等 。

從語法上看,委托的聲明和使用相對簡單,我們可以直接聲明委托類型,創(chuàng)建委托實(shí)例,并調(diào)用委托 。而事件的聲明需要使用event關(guān)鍵字,并且外部代碼不能直接調(diào)用事件,只能通過+=和-=運(yùn)算符來添加或移除事件處理程序 。例如:

// 定義一個(gè)委托

public delegate void MyDelegate();

// 定義一個(gè)包含事件的類

public class MyClass

{

// 聲明一個(gè)事件,基于MyDelegate委托

    public event MyDelegate MyEvent;

    public void DoSomething()

    {

// 觸發(fā)事件

        MyEvent?.Invoke();

    }

}

// 使用事件

class Program

{

    static void Main()

    {

        MyClass myClass = new MyClass();

// 添加事件處理程序

        myClass.MyEvent += () => Console.WriteLine("事件被觸發(fā)了");

        myClass.DoSomething();

    }

}

在這段代碼中,MyDelegate是一個(gè)委托,MyClass類中聲明了一個(gè)基于MyDelegate的事件MyEvent 。在Main方法中,我們使用+=運(yùn)算符為MyEvent添加了一個(gè)事件處理程序,當(dāng)myClass.DoSomething()方法被調(diào)用時(shí),會觸發(fā)MyEvent事件,進(jìn)而執(zhí)行我們添加的事件處理程序 。

(二)委托與 Func、Action

在 C# 中,F(xiàn)unc和Action是預(yù)定義的泛型委托,它們?yōu)槲覀兪褂梦刑峁┝烁颖憬莸姆绞剑拖袷俏械?“快捷工具” 。

Func是一個(gè)有返回值的泛型委托,它的最后一個(gè)類型參數(shù)表示返回值類型,前面的參數(shù)表示方法的輸入?yún)?shù)類型 。例如,F(xiàn)unc<int, int, int>表示一個(gè)接受兩個(gè)int類型參數(shù),并且返回一個(gè)int類型值的方法 。我們可以使用Func來簡化委托的定義和使用,比如:

Func<int, int, int> add = (a, b) => a + b;

int result = add(3, 5);

Console.WriteLine(result); // 輸出8

在這段代碼中,我們使用Func<int, int, int>定義了一個(gè)add委托,它接受兩個(gè)int類型的參數(shù),并返回它們的和 。通過 Lambda 表達(dá)式,我們將具體的加法邏輯賦值給了add委托,然后調(diào)用add委托并傳入?yún)?shù),得到計(jì)算結(jié)果 。

Action是一個(gè)無返回值的泛型委托,它可以接受多個(gè)參數(shù),用于表示一個(gè)沒有返回值的方法 。例如,Action<string>表示一個(gè)接受一個(gè)string類型參數(shù),并且沒有返回值的方法 。使用Action的示例如下:

Action<string> printMessage = message => Console.WriteLine(message);

printMessage("Hello, C# Delegate!");

這里,我們使用Action<string>定義了一個(gè)printMessage委托,它接受一個(gè)string類型的參數(shù),并在委托中實(shí)現(xiàn)了將參數(shù)輸出到控制臺的邏輯 。當(dāng)調(diào)用printMessage委托并傳入?yún)?shù)時(shí),就會執(zhí)行相應(yīng)的輸出操作 。

總的來說,F(xiàn)unc和Action預(yù)定義泛型委托的出現(xiàn),使得我們在使用委托時(shí),不需要再手動(dòng)定義委托類型,大大簡化了代碼的編寫,提高了開發(fā)效率 。

七、總結(jié)與展望

委托作為 C# 中一個(gè)強(qiáng)大且靈活的特性,在編程世界中有著不可或缺的地位。它允許我們將方法作為參數(shù)進(jìn)行傳遞,實(shí)現(xiàn)了方法的動(dòng)態(tài)調(diào)用和回調(diào)機(jī)制,使得代碼具有更高的靈活性和可維護(hù)性 。無論是在事件處理、異步操作,還是在實(shí)現(xiàn)各種設(shè)計(jì)模式中,委托都發(fā)揮著重要的作用 。

通過本文的介紹,希望你已經(jīng)對 C# 中的委托有了深入的理解和掌握。在實(shí)際項(xiàng)目開發(fā)中,不妨大膽地運(yùn)用委托,它將為你的代碼帶來更多的可能性 。同時(shí),隨著 C# 語言的不斷發(fā)展和演進(jìn),委托的應(yīng)用場景也會越來越廣泛,相信未來委托會在更多的領(lǐng)域展現(xiàn)出它的強(qiáng)大魅力 。


閱讀原文:原文鏈接


該文章在 2025/2/7 9:37:33 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚洲成aⅴ人的天堂在线观看女人 | 午夜福利成人污在线观看 | 免费福利电影网 | 一二区视频免费在线观看 | 国产素人视频在线播放 | 亚洲美女国产精品综 | 亚洲色一色噜一噜噜噜人与 | 亚洲中文精品视频在线 | 国产日韩在线视频免费播放 | 国产精品最新资源在线 | 亚洲日本va中文字幕 | 日本三级精 | 蜜桃视频在线观看免费播放 | 国产婷婷综合在线精品尤物 | 成人激情电影 | 亚洲精品字幕在线观看 | 特级西西人体444ww | 欧美亚洲中日韩中文字幕在线 | 欧美精品另类 | 成人国产精品一区二区八戒网 | 老熟女网站 | 日本一区 | 亚洲国产精品自在现线让你爽 | 亚洲天天网| 三年片在线观看免费观看大全 | 国产老熟女精品一区二区 | 国产专区一va亚洲v天堂 | 国产欧美日韩精品综合在线 | 国产女主播午夜福利在线观看 | 国产性夜夜春夜夜爽30 | 日韩大片免费观看 | 色综合激情丁香七月色综合 | 在线精品一区二区三区不卡 | 久爱免费观看在线网站 | 国内精品91最新在线观看 | 国产亚洲精品福利在线无卡一 | 日韩亚洲人成影院 | 精品免费看国产一区二区 | 日本一区二区三区视频在线 | 91全网在线观看国产 | 国产精品自产拍在线观看一 |