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

C# 元件設計模式:延遲載入屬性、事件列表與靜態輔助類別

     編輯:關於C語言

模式一:屬性延遲載入

避免在建構子預先建立昂貴物件,改為第一次存取時才實例化:

public class Component
{
    private ExpensiveObject _data;
    public ExpensiveObject Data
    {
        get
        {
            if (_data == null) _data = new ExpensiveObject(); // 延遲建立
            return _data;
        }
    }
}

優點:節省記憶體,建構子快速完成。缺點:首次存取有微小效能成本。適用於「不一定會被使用」的屬性(如 ASP.NET Style)。

模式二:事件儲存最佳化

傳統每個事件一個 delegate 欄位,會導致物件包含大量委派參考(Windows Forms 控制項可達上千個事件)。.NET Framework 使用 EventHandlerList(內部為雜湊表)集中管理:

public class MyComponent : Component // 繼承 Component 即可使用 Events 屬性
{
    private static readonly object EventClick = new object();
    private static readonly object EventChange = new object();

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

    protected virtual void OnClick(EventArgs e)
    {
        var handler = (EventHandler)Events[EventClick];
        handler?.Invoke(this, e);
    }
}

優點:未訂閱的事件不佔記憶體,靜態鍵值物件所有實例共用,極大減少記憶體佔用。

模式三:靜態輔助類別

將常用工具方法封裝為 sealed 類別的 static 方法,私有建構子防止實例化:


public sealed class DomainHelper
{
    private DomainHelper() { } // 防止實例化
    public static string GetCurrentDomainDir() => AppDomain.CurrentDomain.BaseDirectory;
}

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

優點:命名空間整潔、避免全域方法污染、方便單元測試替換。

總結

這三個模式體現「以時間換空間」、「集中管理減少浪費」、「封裝共用邏輯」的元件設計智慧,廣泛應用於 .NET Framework 核心類別庫中。

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