一个自定义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"}});
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类型。