【代碼片段】序列化和反序列化之集合

    /// <summary>
    /// 集合項
    /// </summary>
    [Serializable]
    public class LibCollectionItem : LibSerializationObject
    {
        private int _Index;
        private object _Owner;
        /// <summary>
        /// 序號
        /// </summary>
        [ReadOnly(true)]
        [Browsable(true)]
        public int Index
        {
            get
            {
                return this._Index;
            }
            set
            {
                this._Index = value;
            }
        }
        /// <summary>
        /// 父對象
        /// </summary>
        [Browsable(false)]
        public object Owner
        {
            get
            {
                return this._Owner;
            }
        }
        /// <summary>
        /// 構造函數
        /// </summary>
        public LibCollectionItem()
        {
            this._Index = -1;
            this._Owner = null;
        }
        /// <summary>
        /// 設置父對象
        /// </summary>
        /// <param name="owner">父對象</param>
        public void SetOwner(object owner)
        {
            this._Owner = owner;
        }

        #region 序列化相關方法成員
        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name="info"></param>
        /// <param name="context"></param>
        public LibCollectionItem(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
            this._Index = GetIntValue(info, "Index", -1);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="info"></param>
        /// <param name="context"></param>
        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            info.AddValue("Index", this._Index);
        }
        #endregion
    }
    /// <summary>
    /// 集合類
    /// </summary>
    /// <typeparam name="T">集合項類型</typeparam>
    [Serializable]
    public class LibCollection<T> : CollectionBase where T : LibCollectionItem
    {
        private object _Owner;
        /// <summary>
        /// 父對象
        /// </summary>
        public object Owner
        {
            get
            {
                return this._Owner;
            }
        }
        /// <summary>
        /// 構造函數
        /// </summary>
        public LibCollection()
        {
        }
        /// <summary>
        /// 添加項
        /// </summary>
        /// <param name="item">項</param>
        /// <returns>返回序號</returns>
        public virtual int Add(T item)
        {
            int iIndex = base.InnerList.Add(item);
            item.Index = iIndex;

            return iIndex;
        }
        /// <summary>
        /// 設置父對象
        /// </summary>
        /// <param name="owner">父對象</param>
        public void SetOwner(object owner)
        {
            this._Owner = owner;
        }
        /// <summary>
        /// 集合屬性
        /// </summary>
        /// <param name="index">序號</param>
        /// <returns>項</returns>
        public T this[int index]
        {
            get
            {
                return (T)base.InnerList[index];
            }
            set
            {
                base.InnerList[index] = value;
            }
        }
        /// <summary>
        /// 依據項返回對應序號
        /// </summary>
        /// <param name="item">項</param>
        /// <returns>序號</returns>
        public int IndexOf(T item)
        {
            return List.IndexOf(item);
        }
        /// <summary>
        /// 插入項
        /// </summary>
        /// <param name="index"></param>
        /// <param name="item"></param>
        public void Insert(int index, T item)
        {            
            List.Insert(index, item);
            for (int i = 0; i < List.Count; i++)
            {
                (List[i] as LibCollectionItem).Index = i;
            }
        }
        /// <summary>
        /// 判斷是否包含項
        /// </summary>
        /// <param name="item">項</param>
        /// <returns>包含則返回TRUE,反之爲FALSE</returns>
        public bool Contains(T item)
        {
            return List.Contains(item);
        }
        /// <summary>
        /// 新建項
        /// </summary>
        /// <returns>返回項</returns>
        public T Add()
        {
            T result = (T)Activator.CreateInstance(typeof(T));
            int iIndex = this.Add(result);
            result.Index = iIndex;

            return result;
        }
        /// <summary>
        /// 依據項刪除項
        /// </summary>
        /// <param name="item">項</param>
        public void Delete(T item)
        {
            LibCollectionItem cItem = (LibCollectionItem)item;
            int index = this.IndexOf(item);
            this.Delete(index);
        }
        /// <summary>
        /// 依據序號刪除項
        /// </summary>
        /// <param name="index">序號</param>
        public void Delete(int index)
        {
            List.RemoveAt(index);
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章