超碰人人人人人,色婷婷综合久久久久中文一区二区,国产-第1页-浮力影院,欧美老妇另类久久久久久

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

C# 高效實現(xiàn)事件發(fā)布與訂閱功能

admin
2025年5月7日 0:43 本文熱度 289

前言

在現(xiàn)代軟件開發(fā)中,事件驅(qū)動架構(Event-Driven Architecture, EDA) 以其高度解耦、靈活擴展的特性被廣泛應用于桌面應用、Web服務、微服務架構等多個領域。其中,事件的發(fā)布與訂閱機制是實現(xiàn)模塊間通信的核心手段之一。

本文將通過一個完整的代碼示例,幫助你理解并掌握如何使用 C# 實現(xiàn)一個簡易但功能完整的事件發(fā)布與訂閱系統(tǒng)

核心概念:什么是委托與事件?

在深入編碼之前,我們先來了解兩個關鍵概念:

委托(Delegate)

委托就像一個“方法容器”,可以用來引用一個或多個具有相同簽名的方法,并在需要時調(diào)用它們。

public delegate void EventHandler(string message);

這表示一個名為 EventHandler 的委托,它接受一個字符串參數(shù),沒有返回值。

事件(Event)

事件是對委托的一種封裝,用于限制外部直接調(diào)用委托,只能通過 += 和 -= 來添加或移除事件處理程序,從而提升安全性。

實現(xiàn)步驟詳解

第一步:聲明委托

定義一個用于事件處理的委托類型。

public delegate void MessageEventHandler(string message);

第二步:定義事件發(fā)布者(Publisher)

這是一個包含事件并負責觸發(fā)事件的類。

public class Publisher
{
    // 聲明事件
    public event MessageEventHandler OnMessagePublished;

    // 觸發(fā)事件的方法
    public void Publish(string message)
    {
        // 使用空條件操作符安全調(diào)用事件
        OnMessagePublished?.Invoke(message);
    }
}

第三步:定義事件訂閱者(Subscriber)

訂閱者通過綁定到事件來響應發(fā)布的消息。

public classSubscriber
{
    public void Subscribe(Publisher publisher)
    {
        // 訂閱事件
        publisher.OnMessagePublished += HandleMessage;
    }

    private void HandleMessage(string message)
    {
        Console.WriteLine($"收到消息: {message}");
    }

    public void Unsubscribe(Publisher publisher)
    {
        // 取消訂閱事件
        publisher.OnMessagePublished -= HandleMessage;
    }
}

第四步:主程序測試運行

class Program
{
    static void Main(string[] args)
    {
        var publisher = new Publisher();
        var subscriber = new Subscriber();

        // 訂閱事件
        subscriber.Subscribe(publisher);

        // 發(fā)布事件
        publisher.Publish("Hello, world!");

        Console.ReadLine();
    }
}

運行后輸出:

收到消息: Hello, world!

完整代碼整合如下:

using System;

namespaceEventDemo
{
    // 1. 聲明委托
    public delegate void MessageEventHandler(string message);

    // 2. 定義發(fā)布者
    publicclassPublisher
    {
        publicevent MessageEventHandler OnMessagePublished;

        public void Publish(string message)
        {
            OnMessagePublished?.Invoke(message);
        }
    }

    // 3. 定義訂閱者
    publicclassSubscriber
    {
        public void Subscribe(Publisher publisher)
        {
            publisher.OnMessagePublished += HandleMessage;
        }

        private void HandleMessage(string message)
        {
            Console.WriteLine($"收到消息: {message}");
        }

        public void Unsubscribe(Publisher publisher)
        {
            publisher.OnMessagePublished -= HandleMessage;
        }
    }

    // 4. 主程序入口
    classProgram
    {
        static void Main(string[] args)
        {
            var publisher = new Publisher();
            var subscriber = new Subscriber();

            subscriber.Subscribe(publisher);

            publisher.Publish("Hello, world!");

            Console.ReadLine();
        }
    }
}

深入理解:事件 vs 委托

特性
委托
事件
定義方式
可以單獨定義
必須依附于類內(nèi)部
外部訪問控制
允許外部直接調(diào)用
僅允許通過 += / -= 修改訂閱者
使用場景
方法回調(diào),多用于函數(shù)式編程
組件間通信,適用于松耦合設計
線程安全
需手動處理
推薦使用空條件調(diào)用確保安全

進階建議

使用泛型事件參數(shù):可以自定義 EventArgs 類型傳遞更復雜的數(shù)據(jù)。

多線程環(huán)境支持:結合 EventHandler<TEventArgs> 和線程同步機制提高并發(fā)性能。

使用 .NET 內(nèi)置事件模型:如 EventHandler 和 EventArgs 提供更好的兼容性和規(guī)范性。

事件聚合器模式:適合大型項目中統(tǒng)一管理事件通信。

總結

通過本文的學習,應該已經(jīng)掌握了以下內(nèi)容:

  • 如何使用 C# 中的 委托和事件 構建基本的事件發(fā)布與訂閱機制;

  • 事件的本質(zhì)是基于委托的一層封裝,提供了更高的訪問安全性和良好的設計模式;

  • 在實際開發(fā)中,合理使用事件可以有效降低模塊間的耦合度,使系統(tǒng)更加靈活、可維護。

掌握事件的聲明、觸發(fā)、訂閱和取消訂閱是每個開發(fā)人員必備的技能。不管是開發(fā) WinForm、WPF、.NET WebAPI還是搭建復雜的后臺服務,事件驅(qū)動都是一種不可或缺的編程思想。


閱讀原文:https://mp.weixin.qq.com/s/X1FPLW1lURzMxO950UdGKw


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