首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

漫談 Visual C# 元件設計方法(三):事件最佳化模式與 Static Helper Object

     編輯:關於C語言

事件記憶體最佳化:從 Hashtable 到 .NET 內建 Events 屬性

自行實作 Hashtable _eventList + static object _key 模式雖省記憶體,但 .NET Framework 已內建更完善的 Component.Events (EventHandlerList) 機制:


public class Component1 : Component
{
    private static readonly object _processStartKey = new object();

    public event EventHandler ProcessStart
    {
        add    { Events.AddHandler(_processStartKey, value); }
        remove { Events.RemoveHandler(_processStartKey, value); }
    }

    protected virtual void OnProcessStart()
    {
        EventHandler handler = (EventHandler)Events[_processStartKey];
        handler?.Invoke(this, EventArgs.Empty);
    }
}
  • 繼承 Component 即可使用 Events 屬性
  • EventHandlerList 內部為單向鏈結串列,未訂閱事件時**零記憶體開銷**
  • 標準 add/remove 存取器模式,相容設計工具與序列化

Static Helper Object 靜態輔助類別模式

C# 純物件導向,**不允許全域函式/變數**,建議以 sealed + private constructor + static members 封裝常用工具方法:


public sealed class DomainHelper
{
    public static string GetCurrentDomainDir()
        => AppDomain.CurrentDomain.BaseDirectory;

    private DomainHelper() { } // 防止實例化
}

// 使用
MessageBox.Show(DomainHelper.GetCurrentDomainDir());

模式優勢

  • 命名空間隔離:避免全域命名污染
  • 不可實例化/繼承:sealed + private ctor 強制靜態使用
  • 可發現性:IntelliSense 直接提示靜態方法
  • 效能:無實例化開銷,JIT 最佳化靜態呼叫

此模式在元件設計中極常見 (如 Path、Environment、Directory 等 BCL 類別皆為靜態工具類)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved