一个自定义Collection类的实现(C#) 第一篇工作日志

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

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

 

  1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
  2InBlock.gif        /// 文本-值  类型的类
  3ExpandedBlockEnd.gif        /// </summary>

  4 None.gif          public   class  Type
  5 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
  6InBlock.gif            //构造函数
  7InBlock.gif            public Type(string strName,string strValue)
  8ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
  9InBlock.gif                this._name=strName;
 10InBlock.gif                this._value=strValue;
 11ExpandedSubBlockEnd.gif            }

 12InBlock.gif
 13InBlock.gif            public Type()
 14ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 15InBlock.gif
 16ExpandedSubBlockEnd.gif            }

 17InBlock.gif
 18InBlock.gif            private string _name="";
 19InBlock.gif            private string _value="";
 20InBlock.gif
 21ExpandedSubBlockStart.gifContractedSubBlock.gif            /**//// <summary>
 22InBlock.gif            /// 获取Type的文本
 23ExpandedSubBlockEnd.gif            /// </summary>

 24InBlock.gif            public string Name
 25ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 26ExpandedSubBlockStart.gifContractedSubBlock.gif                getdot.gif{return this._name;}
 27ExpandedSubBlockEnd.gif            }

 28InBlock.gif
 29ExpandedSubBlockStart.gifContractedSubBlock.gif            /**//// <summary>
 30InBlock.gif            /// 获取Type的值
 31ExpandedSubBlockEnd.gif            /// </summary>

 32InBlock.gif            public string Value
 33ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 34ExpandedSubBlockStart.gifContractedSubBlock.gif                getdot.gif{return this._value;}
 35ExpandedSubBlockEnd.gif            }

 36ExpandedBlockEnd.gif        }

 37 None.gif
 38 ExpandedBlockStart.gifContractedBlock.gif         /**/ /// <summary>
 39InBlock.gif        /// 用来存放 文本-值  类型的类的集合
 40ExpandedBlockEnd.gif        /// </summary>

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

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

 68ExpandedSubBlockEnd.gif                }

 69ExpandedSubBlockEnd.gif            }

 70InBlock.gif
 71ExpandedSubBlockStart.gifContractedSubBlock.gif            /**//// <summary>
 72InBlock.gif            /// 获取TypeCollection中item
 73InBlock.gif            /// </summary>
 74InBlock.gif            /// <param name="strValue">item的值</param>
 75ExpandedSubBlockEnd.gif            /// <returns></returns>

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

 84InBlock.gif                else
 85ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 86InBlock.gif                    return null;
 87ExpandedSubBlockEnd.gif                }

 88ExpandedSubBlockEnd.gif            }

 89InBlock.gif
 90ExpandedSubBlockStart.gifContractedSubBlock.gif            /**//// <summary>
 91InBlock.gif            /// 返回TypeCollection的DataTable
 92InBlock.gif            /// </summary>
 93ExpandedSubBlockEnd.gif            /// <returns></returns>

 94InBlock.gif            public DataTable GetTypeAsDataTable()
 95ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 96InBlock.gif                return dt;
 97ExpandedSubBlockEnd.gif            }

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

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

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

122ExpandedSubBlockEnd.gif                }

123ExpandedSubBlockEnd.gif            }

124InBlock.gif
125ContractedSubBlock.gifExpandedSubBlockStart.gif            绑定下拉控件#region 绑定下拉控件
126ExpandedSubBlockStart.gifContractedSubBlock.gif            /**//// <summary>
127InBlock.gif            /// 绑定下拉控件
128InBlock.gif            /// </summary>
129InBlock.gif            /// <param name="ddl">下拉控件</param>
130InBlock.gif            /// <param name="defaultText">默认项Text</param>
131ExpandedSubBlockEnd.gif            /// <param name="defaultValue">默认项value</param>

132InBlock.gif            public void BindDDlControl(DropDownList ddl,string defaultText,string defaultValue)
133ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
134InBlock.gif                this.BindDDlControl(ddl,defaultText,defaultValue,true);
135ExpandedSubBlockEnd.gif            }

136InBlock.gif
137ExpandedSubBlockStart.gifContractedSubBlock.gif            /**//// <summary>
138InBlock.gif            /// 绑定下拉控件
139InBlock.gif            /// </summary>
140ExpandedSubBlockEnd.gif            /// <param name="ddl">下拉控件</param>

141InBlock.gif            public void BindDDlControl(DropDownList ddl)
142ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
143InBlock.gif                this.BindDDlControl(ddl,"","",false);
144ExpandedSubBlockEnd.gif            }

145ExpandedSubBlockEnd.gif            #endregion

146InBlock.gif
147ContractedSubBlock.gifExpandedSubBlockStart.gif            绑定多选框列表#region 绑定多选框列表
148InBlock.gif            public void BindChkControl(CheckBoxList chk)
149ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
150InBlock.gif                this.BindDDlControl(chk,"","",false);
151ExpandedSubBlockEnd.gif            }

152ExpandedSubBlockEnd.gif            #endregion

153ExpandedBlockEnd.gif        }

154 None.gif
155 ExpandedBlockStart.gifContractedBlock.gif         /**/ /// <summary>
156InBlock.gif        /// 性别
157ExpandedBlockEnd.gif        /// </summary>

158 ExpandedBlockStart.gif ContractedBlock.gif          public   static  TypeCollection tcOrderType = new  TypeCollection( new   string [,] dot.gif {dot.gif{"","1"},dot.gif{"","0"}} );

 

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

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

转载于:https://www.cnblogs.com/sutengcn/archive/2006/12/20/598388.html

中文名: C#开发实战1200例(第2卷) 作者: 王小科 等 资源格式: PDF 版本: 扫描版 出版社: 清华大学出版社 书号: 9787302251552 发行时间: 2011年06月01日 地区: 大陆 语言: 简体中文 简介: 内容简介: 《C#开发实战1200例(第2卷)》以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用c#进行程序开发各个方面的知识和技巧,主要包括鼠标与键盘控制、windows系统开发、数据库及linq开发、水晶报表与打印、注册表操作、软件安全控制等。全书分6篇21章,共计600个实例和600条经验技巧。每个实例都是作者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   《C#开发实战1200例(第2卷)》附带有配套dvd光盘,光盘中提供有书中全部实例的源代码,这些源代码都是经过作者精心调试通过的,保证能够在windows xp、windows 2003及windows 7操作系统下编译和运行。   《C#开发实战1200例(第2卷)》非常适合c#项目开发人员、c#初学者及编程爱好者使用,同时也可作为培训机构、大中专院校老师和学生的实践参考用书。 目录: 第1篇 鼠标与键盘控制篇 第1章 鼠标操作控制 1.1 获取鼠标信息 实例001 获取鼠标双击时间间隔 实例002 获取光标闪烁的频率 实例003 获取鼠标键数 实例004 显示鼠标的等待光标 实例005 获得鼠标在窗体上的位置 实例006 记录鼠标行为 实例007 通过截取系统消息判断鼠标的单击键 1.2 鼠标基本设置 实例008 定义鼠标指针形状 实例009 自定义鼠标的图片 实例010 自定义动画鼠标 实例011 交换鼠标左右键功能 实例012 限制鼠标在某一区域工作 实例013 屏蔽鼠标按键 实例014 鼠标设置器 1.3 鼠标操作在实际中的应用 实例015 隐藏和显示鼠标 实例016 鼠标双击窗体时模拟键盘tab键操作 实例017 使用鼠标拖放复制文本 实例018 利用鼠标绘图 实例019 模拟鼠标操作 实例020 实现鼠标穿透窗体 第2章 键盘操作控制 2.1 获取键盘信息 实例021 获取组合键 实例022 获取功能键 实例023 判断numlock键和capslock键 是否锁定 实例024 将回车键转换为tab键 2.2 键盘热键的设置 实例025 屏蔽alt+f4组合键关闭窗体 实例026 实现按下esc键关闭窗体 实例027 屏蔽系统的ctrl+c/x/v组合键 实例028 避免按回车键产生“嘀”声 实例029 设置/屏蔽系统热键 2.3 键盘操作在实际中的应用 实例030 打开和关闭输入法编辑器 实例031 使用键盘控制窗体的移动 实例032 虚拟键盘操作 实例033 多功能键盘 第2篇 windows系统开发篇 第3章 获取系统相关信息 3.1 获取计算机系统信息 实例034 获取系统时间 实例035 获取系统目录 实例036 获取计算机名称 实例037 获取当前程序运行目录 实例038 获得操作系统版本号 实例039 获取系统启动后经过的时间 实例040 获取任务栏尺寸 实例041 改变系统提示信息 实例042 获取系统环境变量 3.2 获取计算机硬件信息 实例043 获取计算机内存信息 实例044 获取cpu相关信息 实例045 获取主板相关信息 实例046 获得硬盘序列号 实例047 获取所有逻辑分区 实例048 获取磁盘空间 实例049 获得磁盘的文件系统型 实例050 判断驱动器型并获取其属性 实例051 获取显示设备的名称及pnpdeviceid 实例052 获取声音设备的名称及pnpdeviceid 实例053 获取屏幕的分辨率 实例054 获取系统已经安装的打印机信息 3.3 获取系统网络信息 实例055 得到本地机器的ip地址 实例056 检测计算机是否存在网络连接 实例057 判断计算机的联机状态 3.4 获取特殊文件夹路径 实例058 获取系统特殊文件夹路径 实例059 得到本地运行的exe的路径 实例060 获取映射驱动器路径 3.5 获取windows当前用户信息 实例061 获取当前用户 实例062 判断当前用户是哪种用户 3.6 获取windows日志信息 实例063 获取系统日志信息 实例064 获取安全日志信息 实例065 获取应用程序日志信息 实例066 创建并写入自定义日志信息 实例067 向系统日志写入自定义数据 实例068 向应用程序日志写入自定义信息 第4章 系统控制应用 4.1 启动相关 实例069 进入windows前发出警告 实例070 将计算机设置为休眠状态 实例071 禁止用户关闭计算机 实例072
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页