美丽新世界
有一个美丽的新世界,它在远方等我。
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 23 文章- 0 评论- 240
关于C#2.0泛型应用的一个小例子
泛型是C#2.0提供的新特性,关于泛型,我认为不必关心其内部实现,只要知道其好处并且会用就可以了。网上有很多分析泛型的文章,我这里提供一个泛型使用的小例子。
当我们使用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 显示的文字
#region
string ItemText 显示的文字
9
private
string
_itemText;
10
public
string
ItemText
11
{
12
get
{
return
_itemText; }
13
set
{ _itemText
=
value; }
14
}
15
#endregion
16
T ItemValue 实际的值
#region
T ItemValue 实际的值
17
private
T _itemValue;
18
public
T ItemValue
19
{
20
get
{
return
_itemValue; }
21
set
{ _itemValue
=
value; }
22
}
23
#endregion
24
构造方法
#region
构造方法
25
public
ComboBoxItem(
string
itemText, T itemValue)
26
{
27
this
._itemText
=
itemText;
28
this
._itemValue
=
itemValue;
29
}
30
#endregion
31
自定义方法
#region
自定义方法
32
/**/
///
<summary>
33
///
确定指定的对象是否等于当前对象。
34
///
</summary>
35
public
override
bool
Equals(
object
obj)
36
{
37
if
(obj
is
ComboBoxItem
<
T
>
)
38
{
39
ComboBoxItem
<
T
>
rhs
=
(ComboBoxItem
<
T
>
)obj;
40
if
(
this
._itemText.Equals(rhs.ItemText)
&&
this
._itemValue.Equals(rhs.ItemValue))
41
return
true
;
42
else
43
return
false
;
44
}
45
else
46
return
false
;
47
}
48
/**/
///
<summary>
49
///
获取当前对象的哈希代码。
50
///
</summary>
51
public
override
int
GetHashCode()
52
{
53
return
ItemText.GetHashCode()
+
ItemValue.GetHashCode();
54
}
55
/**/
///
<summary>
56
///
重载相等操作符
57
///
</summary>
58
public
static
bool
operator
==
(ComboBoxItem
<
T
>
lhs, ComboBoxItem
<
T
>
rhs)
59
{
60
return
lhs.Equals(rhs);
61
}
62
/**/
///
<summary>
63
///
重载不等操作符
64
///
</summary>
65
public
static
bool
operator
!=
(ComboBoxItem
<
T
>
lhs, ComboBoxItem
<
T
>
rhs)
66
{
67
return
!
(lhs.Equals(rhs));
68
}
69
#endregion
70
}
71
一个ComboBoxItem对象实例代表下拉框的一个选项,其中ItemText是要显示的文字,为string类型,ItemValue是背后挂的对象,为T类型,即使用时可以根据实际需要确定到底是什么具体类型。为了便于进行示例 ,简单构建Student对象如下。
1
/**/
///
<summary>
2
///
学生对象。只有姓名和年龄两个属性
3
///
</summary>
4
public
class
Student
5
{
6
string Name 姓名
#region
string Name 姓名
7
private
string
_name;
8
public
string
Name
9
{
10
get
{
return
_name; }
11
}
12
#endregion
13
int Age 年龄
#region
int Age 年龄
14
private
int
_age;
15
public
int
Age
16
{
17
get
{
return
_age; }
18
}
19
#endregion
20
构造方法
#region
构造方法
21
public
Student(
string
name,
int
age)
22
{
23
_name
=
name;
24
_age
=
age;
25
}
26
#endregion
27
}
28
我们来实现这样一种场景,将一些学生对象绑定到下拉框上,显示的是学生的名字,当选中这个学生时,用对话框弹出学生的年龄。首先假定窗体上有一个下拉框控件conboBox1,我们将学生信息绑定到comboBox1上。
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
以上代码还用到了泛型的嵌套。
然后在comboBox1的SelectedIndexChanged事件中,获取Student对象,弹出其年龄。
1
if
(comboBox1.SelectedIndex
>
0
)
2
{
3
Student s
=
(Student)comboBox1.SelectedValue;
//
获取Student对象
4
MessageBox.Show(s.Age.ToString());
5
}
6
依此类推,在实际使用时每个人都可以根据需要绑定各种类型的对象,以实现代码的复用和类型安全。
posted @ 2008-02-15 16:14
阿多斯
阅读(1847)
评论(13)
编辑
收藏
所属分类:
.NET,C#
发表评论
回复
引用
#1楼
2008-02-15 16:49 |
个广告 [未注册用户]
这么简单的东西还要
写例子
还要发表在首页
回复
引用
查看
#2楼
2008-02-15 17:48 |
beyoung
佩服博主呵~
偶至今没勇气敢在首页发东东.
回复
引用
查看
#3楼
[
楼主
]2008-02-15 17:57 |
阿多斯
来了俩说相声的。。。
没办法,俺水平就这么低
回复
引用
#4楼
2008-02-15 18:06 |
知识海洋的一颗水珠 [未注册用户]
东西简单但是实用,顶顶
回复
引用
查看
#5楼
2008-02-15 18:58 |
Anders Liu
汗……发首页怎么了?只要能对一些人有所帮助,那就是值得的。
回复
引用
#6楼
2008-02-15 21:04 |
一天 [未注册用户]
一二楼的RZH,笑话人不如人。
学识可以不如人,人品最好不要。
回复
引用
查看
#7楼
2008-02-15 22:57 |
海洋
支持博主写东西
回复
引用
查看
#8楼
2008-02-16 11:59 |
KevinLi
又帮助,正在学习泛型
回复
引用
查看
#9楼
2008-02-20 12:37 |
佳文
支持博主。
回复
引用
#10楼
2008-03-20 22:08 |
Tony大 [未注册用户]
支持博主,简单易学。
建议一二楼的写点深奥的自己意淫,反正也没什么人看得懂。
回复
引用
查看
#11楼
2008-05-27 10:42 |
天启
不错,明白了一些,网上很多教程都将的是原理,偶是菜鸟,暂不关心泛型的内幕.
回复
引用
#12楼
2008-05-29 22:36 |
匆匆而过 [未注册用户]
这样写数据查询每次都要枚举,是不是缺乏效率。
回复
引用
#13楼
2008-06-11 17:03 |
qingyun [未注册用户]
鄙视2楼
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
博客园首页
新闻频道
社区
小组
博问
网摘
闪存
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
成果网帮您增加网站收入
相关文章:
电脑故障处理小经验—IE无法打开链接的处理方法
prototype.js 1.4版开发者手册(强烈推荐)
使用Visual Studio2005入门.Net2.0系列视频教程
终于干掉了默认的输入法, 关于ctfmon.exe文件
关于IE问题,请教和求救
C#下如何实现服务器+客户端的聊天程序
相关链接:
所属分类的其他文章:
关于C#2.0泛型应用的一个小例子
关于ListBox控件的一个很逗的错误:“设置DataSource属性后无法修改项集合。”
IIS无法解析*.aspx文件,提示“找不到该文件”的解决方法
ASP.NET项目调试时无法启动IE的解决方法
DNN搜索引擎研究续 • 如何使自定义模块加入DNN搜索引擎
OWC绘图控件研究
最新IT新闻:
Google 10周岁生日
祝Google 10周岁生日快乐
Google十年市值达1500亿美元 创造奇迹
GMail:回过头来支持IE6
Google十年大变样
公告
念念之中,不思前境。
若前念、今念、后念,
念念相续不断,名为系缚。
于诸法上,念念不住,
即无缚也。
——六祖坛经
我的邮件:xyyyy.com@gmail.com
我的MSN:xyyyy.com@gmail.com
<
2008年2月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参加的小组
生活杂谈
项目经理联盟
设计模式
程序员音乐空间
ASP.NET
创业交流
读书(Books)
研究DNN,拥抱开源
SAP
CLR基础研究小组
我参与的团队
DNN团队博客(0/325)
随笔分类
.NET,C#(6)
(rss)
DotNetNuke,DNN(3)
(rss)
软件设计,设计模式(1)
(rss)
数据库技术(2)
(rss)
随便聊聊(4)
(rss)
项目管理(3)
(rss)
总结与计划(5)
(rss)
随笔档案
2008年2月 (1)
2008年1月 (1)
2007年12月 (1)
2007年11月 (3)
2007年10月 (1)
2007年8月 (2)
2007年5月 (1)
2007年4月 (1)
2007年3月 (3)
2007年2月 (2)
2007年1月 (4)
My Friends' Blog
Clingingboy控件开发
青椒
向名花美酒拼沉醉
积分与排名
积分 - 34161
排名 - 1219
最新评论
1. re: 各种有用的URL收藏
在线团队管理的项目
tuandui.d4ctiy.com
团队易 (修罗123)
2. re: 我的2007-高开低走,无甚成就
非常感谢楼上。 (阿多斯)
3. re: 我的2007-高开低走,无甚成就
加油 ,你真的做的很好了
你一直在努力努力
一定会好的
身体会好的
事业会好的
家庭会更好的
永远支持你!
(苏菲)