• [Enterprise Library]Data (二)DataCollection


    上节[Enterprise Library]Data (一)Data的config文件我们看到三个集合类:
    DatabaseTypeDataCollection
    InstanceDataCollection
    ConnectionStringDataCollection

    它们都是从Enterprise Library的Common.DataCollection中继承而来,
        [XmlType(IncludeInSchema=false)]
        [Serializable]
        public abstract class DataCollection : ICollection, ISerializable, IDeserializationCallback
        {
           ...
        }


    1)DataCollection有五个构造函数:
    protected DataCollection()
    protected DataCollection(int capacity)
    protected DataCollection(IHashCodeProvider hashCodeProvider, IComparer comparer)
    protected DataCollection(int capacity, IHashCodeProvider hashCodeProvider, IComparer comparer)
    protected DataCollection(SerializationInfo info, StreamingContext context)

    2)与以前dotText中处理的普通Collection一样,内部需要定义一个IEnumerator:
            [Serializable()]
            internal class DataCollectionValuesEnumerator : IEnumerator

    类似地,这个类需要实现一下:
    public bool MoveNext()
    public void Reset()
    public object Current

    并且Collection中需要有这样一个GetEnumerator()函数:
            public IEnumerator GetEnumerator()
            {
                return new DataCollectionValuesEnumerator(this);
            }

    3)内部还额外地实现了一个存取String的Collection:KeysCollection
            [Serializable()]
            public sealed class KeysCollection : ICollection

    a)取string
    public String Get(int index)
    public string this[int index]

    b)string版的CopyTo
    void ICollection.CopyTo(Array array, int index) { string[] stringArray = array as string[]; ... }
    public void CopyTo(string[] array, int index)

    c)构造函数:nternal KeysCollection(DataCollection collection)
    d)public IEnumerator GetEnumerator()

    而在Collecton中:
            private KeysCollection keys;
            public KeysCollection Keys
            {
                get
                {
                    if (keys == null)
                    {
                        keys = new KeysCollection(this);
                    }
                    return keys;
                }
            }

    4)DataCollection中public的函数:

    public bool Contains(string name)
    public void RemoveAt(int index)
    public void Remove(string name)
    public void Clear()
    public void CopyTo(Array array, int index)


    public virtual void OnDeserialization(Object sender)
    public virtual void GetObjectData(SerializationInfo info, StreamingContext context)


    其它的内部实现以后再分析。

  • 相关阅读:
    Gym 101149I: It's the Police (图,思维)
    把ORM封装成一个类(linq to entity)
    jquery跨域,getJson跨域解决方案
    Jquery中AJAX参数详细列表:
    Multipart forms from C# client
    “ThreadPool 对象中没有足够的自由线程来完成操作”的现象和解决办法
    .NET垃圾回收 问题、建议
    C# HttpWebRequest保存cookies模拟登录的方法
    基础连接已经关闭:服务器关闭了本应保持活动状态的连接 解决方法
    C# 模拟上传图片
  • 原文地址:https://www.cnblogs.com/huqingyu/p/217429.html
Copyright © 2020-2023  润新知