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 狀態保持。