zoukankan      html  css  js  c++  java
  • 一个自定义Collection类的实现(C#) 第一篇工作日志

    决心从今天起开始写工作日志。可以对工作的总结和对人生感悟。很多年后,也许会是一笔厚厚的财富。

    今天用C#实现了一个Collection类。放着现成.net类库中的Array,ArrayList,HashTable等等集合类不用,为什么要重写一个呢。
    不知道大家有没有遇到这种情况。项目开发过程中会遇到状态,性别,某某类型等情况,显示给用户看的是文本,而存储在数据库中的是值。比如性别,可能有 男对应1,女对应0。怎么在程序中完成这种对应呢。
       第一种采用系统参数的办法。专门为此建一个参数表。
       第二种在程序中对这些 文本--值 的类型进行定义。虽然可以使用.net类库中数组或其他集合定义,但是将来使用这些定义时不方便。比如根据值获得文本,从数据库取得0,如何判断它对应的文本值女。或者是向下拉控件中绑定这些值。都不是很方便。
       所以我定义了新的集合类TypeCollection。以下是代码。贴出来和大家切磋。

      1/// <summary>
      2        /// 文本-值  类型的类
      3        /// </summary>

      4        public class Type
      5        {
      6            //构造函数
      7            public Type(string strName,string strValue)
      8            {
      9                this._name=strName;
     10                this._value=strValue;
     11            }

     12
     13            public Type()
     14            {
     15
     16            }

     17
     18            private string _name="";
     19            private string _value="";
     20
     21            /// <summary>
     22            /// 获取Type的文本
     23            /// </summary>

     24            public string Name
     25            {
     26                get{return this._name;}
     27            }

     28
     29            /// <summary>
     30            /// 获取Type的值
     31            /// </summary>

     32            public string Value
     33            {
     34                get{return this._value;}
     35            }

     36        }

     37
     38        /// <summary>
     39        /// 用来存放 文本-值  类型的类的集合
     40        /// </summary>

     41        public class TypeCollection
     42        {
     43            private DataTable dt=null;
     44            public const string NameField="Name";
     45            public const string ValueField="Value";
     46
     47            public TypeCollection()
     48            {
     49                dt=new DataTable();
     50                dt.Columns.Add(NameField);
     51                dt.Columns.Add(ValueField);
     52            }

     53
     54            public TypeCollection(string[,] listItem)
     55            {
     56                dt=new DataTable();
     57                dt.Columns.Add(NameField);
     58                dt.Columns.Add(ValueField);
     59                
     60                if(listItem.Length>0)
     61                {
     62                    //获取一维个数
     63                    int count=listItem.Length/listItem.Rank;
     64                    for(int i=0;i<count;i++)
     65                    {
     66                        dt.Rows.Add(new object[]{listItem[i,0],listItem[i,1]});
     67                    }

     68                }

     69            }

     70
     71            /// <summary>
     72            /// 获取TypeCollection中item
     73            /// </summary>
     74            /// <param name="strValue">item的值</param>
     75            /// <returns></returns>

     76            public Type GetItemByValue(string strValue)
     77            {
     78                DataRow[] rows=dt.Select(string.Format("Value='{0}'",strValue.Trim()));
     79                
     80                if(rows!=null&&rows.Length>0)
     81                {
     82                    return new Type(rows[0].ToString(),rows[1].ToString());
     83                }

     84                else
     85                {
     86                    return null;
     87                }

     88            }

     89
     90            /// <summary>
     91            /// 返回TypeCollection的DataTable
     92            /// </summary>
     93            /// <returns></returns>

     94            public DataTable GetTypeAsDataTable()
     95            {
     96                return dt;
     97            }

     98
     99            /// <summary>
    100            /// 绑定列表控件
    101            /// </summary>
    102            /// <param name="ddl">列表控件</param>
    103            /// <param name="defaultText">默认项Text</param>
    104            /// <param name="defaultValue">默认项value</param>
    105            /// <param name="exitDefault">是否要默认项</param>

    106            private void BindDDlControl(ListControl objControl,string defaultText,string defaultValue,bool exitDefault)
    107            {
    108                if(dt!=null&&dt.Rows.Count>0)
    109                {
    110                    objControl.Items.Clear();
    111
    112                    //添加默认项
    113                    if(exitDefault)
    114                    {
    115                        objControl.Items.Add(new ListItem(defaultText,defaultValue));
    116                    }

    117                    //绑定数据
    118                    foreach(DataRow row in dt.Rows)
    119                    {
    120                        objControl.Items.Add(new ListItem(row[0].ToString().Trim(),row[1].ToString().Trim()));
    121                    }

    122                }

    123            }

    124
    125            绑定下拉控件
    146
    147            绑定多选框列表
    153        }

    154
    155        /// <summary>
    156        /// 性别
    157        /// </summary>

    158        public static TypeCollection tcOrderType=new TypeCollection(new string[,]{{"","1"},{"","0"}});

     这个集合类可以方便实现
    1,文本--值类型的定义
    2,根据值查找文本
    3,向控件绑定更方便。
    尤其是定义大量的类型时。

    总结:1,可以通过自己对.net类库的灵活使用 ,实现更多的功能。
    2,多态的应用。对于多选框和下拉框,都是ListControl控件。参数声明直接声明为基类型。
    3, 对面向对象的深入理解。具有相同行为和属性的一组对象,可以抽象为类。定义统一的方法和属性。比如本例中的Type和TypeCollection类型。

  • 相关阅读:
    xcode多target管理不同的环境(pod多target配置)
    OC与swift混编 #import "项目名-Swift.h"失效问题
    令人困惑的strtotime
    krpano 学习第一天
    git 全量同步分支
    MYSQL 什么时候用单列索引?什么使用用联合索引?
    _blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK} pip
    Mac php 装imagick扩展 菜鸟教程
    git仓库搬家
    文章简介 字符串截取
  • 原文地址:https://www.cnblogs.com/sutengcn/p/598388.html
Copyright © 2011-2022 走看看