本類型比較簡單,定義了一些樹狀節點擁有的屬性,此外還定義了一個Nodes子節點列表,一個節點可以有若干個子節點,則多個節點組合起來就可以構成樹狀列表。
該類型前面使用代碼“[System.Serializable()]”來指定類型可以進行二進制序列化,在ASP.Net2.0中,所有可以保存在頁面Session或ViewState中的對象必須可以執行二進制序列化,若SkyTreeNode類型沒有使用代碼 “[System.Serializable()]”標記為可執行二進制序列化,則不能將其保存在頁面Session或VIEwState中。類型 SkyTreeNode前面還使用代碼“[System.Xml.Serialization.XmlType("Node")]”來指定類型進行XML 序列化時的使用的XML標簽名為“Node”。
對“Parent”屬性在使用代碼“[System.Xml.Serialization.XmlIgnore()]”表明該屬性不執行XML序列化和反序列化。由於XML序列化是遞歸處理對象的所有的可讀寫屬性,而“Parent”屬性指向該節點的父節點,而父節點的“Nodes”屬性又包含了這個節點,如此形成了對象循環引用,若“Parent”屬性參與XML序列化則必然會造成無限遞歸循環,導致程序錯誤。
SkyTreeNodeList.cs
該文件定義了SkyTreeNodeList類型,該類型是樹狀節點列表,能存儲若干個樹狀節點對象,該類型的代碼為
/// <summary>
/// 樹狀列表節點列表
/// </summary>
[System.Serializable()]
public class SkyTreeNodeList : System.Collections.CollectionBase
{
/// <summary>
/// 初始化對象
/// </summary>
public SkyTreeNodeList()
{
}
/// <summary>
/// 初始化對象
/// </summary>
/// <param name="node">列表所屬節點對象</param>
public SkyTreeNodeList(SkyTreeNode node)
{
myOwnerNode = node;
}
private SkyTreeNode myOwnerNode = null;
/// <summary>
/// 擁有該列表的節點對象
/// </summary>
[System.ComponentModel.Browsable(false)]
public SkyTreeNode OwnerNode
{
get
{
return myOwnerNode;
}
}
/// <summary>
/// 返回指定序號處的節點對象
/// </summary>
public SkyTreeNode this[int index]
{
get
{
return (SkyTreeNode)this.List[index];
}
}
/// <summary>
/// 向列表添加節點
/// </summary>
/// <param name="node">節點對象</param>
/// <returns>新節點在列表中的序號</returns>
public int Add(SkyTreeNode node)
{
if (node == null)
throw new ArgumentNullException("node");
if (myOwnerNode != null)
node.Parent = myOwnerNode;
return this.List.Add(node);
}
/// <summary>
/// 向列表添加若干個節點
/// </summary>
/// <param name="nodes">節點列表,該列表中的元素類型必須為SkyTreeNode類型</param>
public void AddRange(System.Collections.ICollection nodes)
{
if (nodes == null)
throw new ArgumentNullException("nodes");
foreach (SkyTreeNode node in nodes)
{
if (myOwnerNode != null)
node.Parent = myOwnerNode;
this.List.Add(node);
}
}
/// <summary>
/// 刪除節點
/// </summary>
/// <param name="node">節點對象</param>
public void Remove(SkyTreeNode node)
{
this.List.Remove(node);
}
/// <summary>
/// 判斷節點在列表中的序號
/// </summary>
/// <param name="node">節點對象</param>
/// <returns>節點在列表中的從0開始的序號,若不存在則返回-1</returns>
public int IndexOf(SkyTreeNode node)
{
return this.List.IndexOf(node);
}
/// <summary>
/// 判斷列表是否存在指定的節點對象
/// </summary>
/// <param name="node">節點對象</param>
/// <returns>是否存在該節點</returns>
public bool Contains(SkyTreeNode node)
{
return this.List.Contains(node);
}
}//public class SkyTreeNodeList : System.Collections.CollectionBase