关于C#2.0泛型应用的一个小例子
泛型是C#2.0提供的新特性,关于泛型,我认为不必关心其内部实现,只要知道其好处并且会用就可以了。网上有很多分析泛型的文章,我这里提供一个泛型使用的小例子。
当我们使用WinForm的下拉框控件ComboBox的时候,往往希望其Item在显示一个值的同时,背后再挂一个对象,这样方便我们进行业务操作,但是ComboBox不允许直接在其Item上挂对象,所以可以写如下一个泛型类。
然后在comboBox1的SelectedIndexChanged事件中,获取Student对象,弹出其年龄。
注:后来发现这篇文章有个地方存在错误,详见对象判等和重载==操作符
当我们使用WinForm的下拉框控件ComboBox的时候,往往希望其Item在显示一个值的同时,背后再挂一个对象,这样方便我们进行业务操作,但是ComboBox不允许直接在其Item上挂对象,所以可以写如下一个泛型类。
1 /// <summary>
2 /// 泛型类。用于构造ComboBoxItem控件的Item对象。
3 /// 该类可以被所有项目共用。
4 /// </summary>
5 /// <typeparam name="T"></typeparam>
6 public class ComboBoxItem<T>
7 {
8 string ItemText 显示的文字
16 T ItemValue 实际的值
24 构造方法
31 自定义方法
70 }
71
一个ComboBoxItem对象实例代表下拉框的一个选项,其中ItemText是要显示的文字,为string类型,ItemValue是背后挂的对象,为T类型,即使用时可以根据实际需要确定到底是什么具体类型。为了便于进行示例 ,简单构建Student对象如下。2 /// 泛型类。用于构造ComboBoxItem控件的Item对象。
3 /// 该类可以被所有项目共用。
4 /// </summary>
5 /// <typeparam name="T"></typeparam>
6 public class ComboBoxItem<T>
7 {
8 string ItemText 显示的文字
16 T ItemValue 实际的值
24 构造方法
31 自定义方法
70 }
71
1 /// <summary>
2 /// 学生对象。只有姓名和年龄两个属性
3 /// </summary>
4 public class Student
5 {
6 string Name 姓名
13 int Age 年龄
20 构造方法
27 }
28
我们来实现这样一种场景,将一些学生对象绑定到下拉框上,显示的是学生的名字,当选中这个学生时,用对话框弹出学生的年龄。首先假定窗体上有一个下拉框控件conboBox1,我们将学生信息绑定到comboBox1上。2 /// 学生对象。只有姓名和年龄两个属性
3 /// </summary>
4 public class Student
5 {
6 string Name 姓名
13 int Age 年龄
20 构造方法
27 }
28
1 //构建数据源,这时T为Student
2 List<ComboBoxItem<Student>> list = new List<ComboBoxItem<Student>>();
3 list.Add(new ComboBoxItem<Student>("", null));
4 Student s1 = new Student("张三", 15);
5 Student s2 = new Student("李四", 16);
6 list.Add(new ComboBoxItem<Student>(s1.Name, s1));
7 list.Add(new ComboBoxItem<Student>(s2.Name, s2));
8 //绑定到下拉框
9 comboBox1.DataSource = list;
10 comboBox1.DisplayMember = "ItemText";//显示的文字
11 comboBox1.ValueMember = "ItemValue";//背后的对象
12
以上代码还用到了泛型的嵌套。2 List<ComboBoxItem<Student>> list = new List<ComboBoxItem<Student>>();
3 list.Add(new ComboBoxItem<Student>("", null));
4 Student s1 = new Student("张三", 15);
5 Student s2 = new Student("李四", 16);
6 list.Add(new ComboBoxItem<Student>(s1.Name, s1));
7 list.Add(new ComboBoxItem<Student>(s2.Name, s2));
8 //绑定到下拉框
9 comboBox1.DataSource = list;
10 comboBox1.DisplayMember = "ItemText";//显示的文字
11 comboBox1.ValueMember = "ItemValue";//背后的对象
12
然后在comboBox1的SelectedIndexChanged事件中,获取Student对象,弹出其年龄。
1 if (comboBox1.SelectedIndex > 0)
2 {
3 Student s = (Student)comboBox1.SelectedValue;//获取Student对象
4 MessageBox.Show(s.Age.ToString());
5 }
6
依此类推,在实际使用时每个人都可以根据需要绑定各种类型的对象,以实现代码的复用和类型安全。2 {
3 Student s = (Student)comboBox1.SelectedValue;//获取Student对象
4 MessageBox.Show(s.Age.ToString());
5 }
6
注:后来发现这篇文章有个地方存在错误,详见对象判等和重载==操作符