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

C# 發現之旅:高效能 ASP.NET TreeView 控制項 (上) — SkyTreeNodeList 強型別集合實作

     編輯:關於C語言

SkyTreeNodeList 類別定義


[Serializable]
public class SkyTreeNodeList : CollectionBase {
    private SkyTreeNode myOwnerNode;

    public SkyTreeNodeList() { }
    public SkyTreeNodeList(SkyTreeNode owner) { myOwnerNode = owner; }

    [Browsable(false)]
    public SkyTreeNode OwnerNode { get { return myOwnerNode; } }

    public SkyTreeNode this[int index] {
        get { return (SkyTreeNode)List[index]; }
    }

    public int Add(SkyTreeNode node) {
        if (node == null) throw new ArgumentNullException("node");
        if (myOwnerNode != null) node.Parent = myOwnerNode;
        return List.Add(node);
    }

    public void AddRange(ICollection nodes) {
        if (nodes == null) throw new ArgumentNullException("nodes");
        foreach (SkyTreeNode node in nodes) {
            if (myOwnerNode != null) node.Parent = myOwnerNode;
            List.Add(node);
        }
    }

    public void Remove(SkyTreeNode node) { List.Remove(node); }
    public int IndexOf(SkyTreeNode node) { return List.IndexOf(node); }
    public bool Contains(SkyTreeNode node) { return List.Contains(node); }
}

設計亮點

  • 繼承 CollectionBase 獲得非泛型集合基礎功能 (List、Count、Clear 等)。
  • [Serializable] 支援 ViewState/Session 序列化 (ASP.NET 2.0 必備)。
  • OwnerNode 回指父節點,Add/AddRange 自動設定 node.Parent,維護雙向關聯。
  • 強型別索引器 this[int] 回傳 SkyTreeNode,避免轉型。
  • 標準集合介面方法 Add/Remove/IndexOf/Contains,符合開發者直覺。

序列化與 ViewState

  • ASP.NET 2.0 要求放入 ViewState/Session 的物件必須可序列化。
  • SkyTreeNode、SkyTreeNodeList 均標記 [Serializable],確保跨 Postback 狀態保持。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved