<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_wudi</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/26298/rss</id><updated>2012-02-01T07:24:24Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/26298/rss"/><entry><id>http://www.cnblogs.com/birdwudi/archive/2011/03/14/1983927.html</id><title type="text">MySQL数据库集群Master-Slave模式安装摘要</title><summary type="text">（转）http://www.flatws.cn/article/program/db2/2011-02-25/14566.html 很久前搞过了，有点忘了，重新配一下，巩固巩固，呵呵！M-S使用的单向，异步的复制方法。而Cluster采用的是无共享的系统中部署“内存中”数据库的簇。M-S是概念上的“同步”，而Cluster是真正意义上的同步，MySQL的Cluster是类似与DB2的无共享集群，易于扩展。这里讲讲Master-Slave模式，以Windows下安装为例：1.分别在两台机上安装MySQL数据库.master: 192.168.2.14slave: 192.168.2.82.在ma</summary><published>2011-03-14T08:29:00Z</published><updated>2011-03-14T08:29:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2011/03/14/1983927.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2011/03/14/1983927.html"/><content type="html">&lt;span style="border-collapse: separate; color: #000000; font-family: Simsun; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"&gt;&lt;span style="color: #656d77; font-family: 宋体; font-size: 14px; line-height: 25px;"&gt;&lt;p style="word-wrap: break-word;"&gt;（转）&lt;div&gt;&lt;a href="http://www.flatws.cn/article/program/db2/2011-02-25/14566.html"&gt;http://www.flatws.cn/article/program/db2/2011-02-25/14566.html&lt;/a&gt;&lt;/div&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;很久前搞过了，有点忘了，重新配一下，巩固巩固，呵呵！&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;span style="word-wrap: break-word; font-size: small;"&gt;&lt;span style="word-wrap: break-word; font-size: x-small;"&gt;&lt;span style="word-wrap: break-word; font-family: 'arial black','avant garde';"&gt;&lt;span style="word-wrap: break-word;"&gt;M-S&lt;/span&gt;使用的单向，异步的复制方法。而&lt;span style="word-wrap: break-word;"&gt;Cluster&lt;/span&gt;采用的是无共享的系统中部署&lt;span style="word-wrap: break-word;"&gt;&amp;#8220;&lt;/span&gt;内存中&lt;span style="word-wrap: break-word;"&gt;&amp;#8221;&lt;/span&gt;数据库的簇。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;span style="word-wrap: break-word; font-size: small;"&gt;&lt;span style="word-wrap: break-word; font-size: x-small;"&gt;&lt;span style="word-wrap: break-word; font-family: 'arial black','avant garde';"&gt;&lt;span style="word-wrap: break-word; font-size: x-small;"&gt;&lt;span style="word-wrap: break-word;"&gt;M-S&amp;nbsp;&lt;/span&gt;是概念上的&amp;#8220;同步&amp;#8221;，而&lt;span style="word-wrap: break-word;"&gt;Cluster&lt;/span&gt;是真正意义上的同步，&lt;span style="word-wrap: break-word;"&gt;&lt;span style="word-wrap: break-word; background-color: #ffff00;"&gt;MySQL&lt;/span&gt;&lt;/span&gt;的&lt;span style="word-wrap: break-word;"&gt;Cluster&lt;/span&gt;是类似与&lt;span style="word-wrap: break-word;"&gt;DB2&lt;/span&gt;的无共享集群，易于扩展。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;这里讲讲Master-Slave模式，以Windows下安装为例：&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;1.分别在两台机上安装MySQL数据库.&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;master:&amp;nbsp; 192.168.2.14&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;slave:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.2.8&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;2.在master上建立要同步的数据库，如testdb.&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;打开my.ini文件，在最后面添加如下内容后重启服务。(linux下my.cnf)&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;server-id=1&lt;br style="word-wrap: break-word;" /&gt;binlog-do-db=testdb&lt;br style="word-wrap: break-word;" /&gt;log-bin=mysql-bin&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;3.在slave上同样建立testdb。&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;（网上有的说建立之后反而报错，但是我发现好像一开始还是需要建立库和表结构的，之后才会同步数据&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;莫非版本不同？我这是用的是MySQL5.0.x, 详情可参考数据库安装目录下data/机器名.err文件）&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;打开my.ini文件，在最后面添加如下内容后重启服务。&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;server-id=2&lt;br style="word-wrap: break-word;" /&gt;master-host=192.168.2.14&lt;br style="word-wrap: break-word;" /&gt;master-user=root&lt;br style="word-wrap: break-word;" /&gt;master-password=root&lt;br style="word-wrap: break-word;" /&gt;master-port=3306&lt;br style="word-wrap: break-word;" /&gt;replicate-do-db=testdb&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;4.在master上赋一下权限&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;grant all on *.* to&amp;nbsp;&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#114;&amp;#111;&amp;#111;&amp;#116;&amp;#64;&amp;#37;&amp;#50;&amp;#55;&amp;#49;&amp;#57;&amp;#50;&amp;#46;&amp;#49;&amp;#54;&amp;#56;&amp;#46;&amp;#50;&amp;#46;&amp;#56;&amp;#37;&amp;#50;&amp;#55;" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;root@'192.168.2.8'&lt;/a&gt;&amp;nbsp;identified by 'root'&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;strong style="word-wrap: break-word;"&gt;5.查询下状态&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;master:&amp;nbsp;&amp;nbsp; show master stutas;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;slave&amp;nbsp;&amp;nbsp; :&amp;nbsp;&amp;nbsp; show&amp;nbsp;slave stutas;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;参考资料：&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://blog.myspace.cn/e/404626452.htm" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://blog.myspace.cn/e/404626452.htm&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://java221.javaeye.com/blog/686284" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://java221.javaeye.com/blog/686284&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://www.javaeye.com/topic/829371" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://www.javaeye.com/topic/829371&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://www.javaeye.com/topic/171427" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://www.javaeye.com/topic/171427&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://database.51cto.com/art/201006/205858.htm" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://database.51cto.com/art/201006/205858.htm&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://hi.baidu.com/fairywood/blog/item/f9a26213a3e2eb886438db3c.html" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://hi.baidu.com/fairywood/blog/item/f9a26213a3e2eb886438db3c.html&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://blog.163.com/dandanhjj@126/blog/static/162586077201032602631133/" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://blog.163.com/dandanhjj@126/blog/static/162586077201032602631133/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;下面是一个关于MySQL 5.1下配置的网页：&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://www.zhuoda.org/lunzi/114670.html" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://www.zhuoda.org/lunzi/114670.html&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;1、一台机器上装了两个版本不同的mysql数据库来实现，5.1版本做master，5.0的版本做slave来实现主从备份。&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;2、5.1端口用的3307，5.0端口用的3308.&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;在Master(Mysql5.1)的数据库中建立一个备份帐户，命令如下&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;GRANT REPLICATION SLAVE ON *.* TO 'slave'@'localhost' IDENTIFIED BY '654321';&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;3、Master 为Mysql5.1 修改如下(my.ini):&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;加在文件的最后就可以，&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;[mysqld]&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#Master start&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#日志输出地址 主要同步使用&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;log-bin=C:/ProgramData/MySQL/MySQL Server 5.1/Data/log-bin.log&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#同步数据库&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;binlog-do-db=test&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#主机id 不能和从机id重复&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;server-id=1&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#Master end&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;4、.Slave 为Mysql5.0 修改如下(my.ini):&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;同样把下列代码加到文件的底部即可，&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;[mysqld]&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#Slave start&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;log-bin=D:/Program Files/MySQL/MySQL Server 5.0/Data/log-bin.log&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#从机id，区别于主机id&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;server-id=2&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#主机ip，供从机连接主机用&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;master-host=localhost&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#主机端口&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;master-port=3307&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#刚才为从机复制主机数据新建的账号&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;master-user=slave&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#刚才为从机复制主机数据新建的密码&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;master-password=654321&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#重试间隔时间10秒&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;master-connect-retry=10&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#需要同步的数据库&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;replicate-do-db=test&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#启用从库日志，这样可以进行链式复制&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;log-slave-updates&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#从库是否只读，0表示可读写，1表示只读&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;read-only=1&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#只复制某个表&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#replicate-do-table=tablename&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#只复制某些表（可用匹配符）&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#replicate-wild-do-table=tablename%&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#只复制某个库&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#replicate-do-db=dbname&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#不复制某个表&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#replicate-ignore-table=tablename&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#不复制某些表&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#replicate-wild-ignore-table=tablename%&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#不复制某个库&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#replicate-ignore-db=dbname&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;#Slave end&lt;br style="word-wrap: break-word;" /&gt;5、查询当前主机数据库文件和位置&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;show master status;&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;6、&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;use test;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;CREATE TABLE `users` (&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `id` bigint(20) NOT NULL auto_increment,&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `name` varchar(255) default NULL,&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRIMARY KEY&amp;nbsp;&amp;nbsp;(`id`)&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;) ENGINE=InnoDB DEFAULT CHARSET=utf8;&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;&amp;nbsp;&amp;nbsp;insert users(name) values('jacky');&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;&lt;br style="word-wrap: break-word;" /&gt;测试ok，可以正常工作。&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;下面是Master-Master模式的安装资料：&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://blog.csdn.net/yueliangdao0608/archive/2008/10/29/3173231.aspx" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://blog.csdn.net/yueliangdao0608/archive/2008/10/29/3173231.aspx&lt;/a&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word;"&gt;&lt;a href="http://www.javaeye.com/topic/162717" style="word-wrap: break-word; font: 14px/25px 宋体; color: #4976ad; margin: auto; text-decoration: none;"&gt;http://www.javaeye.com/topic/162717&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1983927.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2011/03/14/1983927.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2011/01/07/1930199.html</id><title type="text">使用HtmlAgilityPack批量抓取网页数据</title><summary type="text">转：http://www.cnblogs.com/chuncn/archive/2009/09/07/1561564.html登录的处理。因为有些网页数据需要登陆后才能提取。这里要使用ieHTTPHeaders来提取登录时的提交信息。抓取网页 HtmlAgilityPack.HtmlDocumenthtmlDoc;if(!string.IsNullOrEmpty(登录URL)){htmlDoc=htmlWeb.Load(登录URL,提交的用户验证信息,获取数据的网页URL);}else{htmlDoc=htmlWeb.Load(获取数据的网页URL);}ArrayListlist=newArr</summary><published>2011-01-07T09:31:00Z</published><updated>2011-01-07T09:31:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2011/01/07/1930199.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2011/01/07/1930199.html"/><content type="html">&lt;p&gt;转：&lt;a href="http://www.cnblogs.com/chuncn/archive/2009/09/07/1561564.html"&gt;http://www.cnblogs.com/chuncn/archive/2009/09/07/1561564.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;登录的处理。因为有些网页数据需要登陆后才能提取。这里要使用ieHTTPHeaders来提取登录时的提交信息。&lt;br /&gt;&lt;br /&gt;抓取网页 &lt;/p&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HtmlAgilityPack.HtmlDocument&amp;nbsp;htmlDoc;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.IsNullOrEmpty(登录URL))&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /&gt;&lt;img style="display: none" title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" src="http://www.cnblogs.com/Images/dot.gif" alt=""&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;htmlDoc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;htmlWeb.Load(登录URL,&amp;nbsp;提交的用户验证信息,&amp;nbsp;获取数据的网页URL);&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /&gt;&lt;img style="display: none" title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" src="http://www.cnblogs.com/Images/dot.gif" alt=""&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;htmlDoc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;htmlWeb.Load(获取数据的网页URL);&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div id="blogtext_fks_082067085084082074081095082095085086085067083084080068092" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ArrayList&amp;nbsp;list&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ArrayList();&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.add(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;//table/tr[1]/td&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.add(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;//table/tr[2]/td&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;获取循环的节点的xpath，比如：&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;table/tr&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HtmlNodeCollection&amp;nbsp;repeatNodes&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;htmlDoc.DocumentNode.SelectNodes(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;//table/tr&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;循环节点&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(HtmlNode&amp;nbsp;node&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;repeatNodes)&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /&gt;&lt;img style="display: none" title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" src="http://www.cnblogs.com/Images/dot.gif" alt=""&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;循环获取数据&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dataPath&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;list)&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /&gt;&lt;img style="display: none" title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" src="http://www.cnblogs.com/Images/dot.gif" alt=""&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HtmlNode&amp;nbsp;dataNode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;node.SelectSingleNode(list);&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(dataNode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /&gt;&lt;img style="display: none" title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" src="http://www.cnblogs.com/Images/dot.gif" alt=""&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dataNode.InnerText;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;如果出现乱码，调整编码集为gb2312或者是utf-8&lt;/p&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;img title="使用HtmlAgilityPack批量抓取网页数据  - GameStart - Program  Management" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;htmlWeb.DefaultEncoding&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Text.Encoding.GetEncoding(strEncode);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------&lt;br /&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.Collections.Generic;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.Text;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; Microsoft.VisualStudio.TestTools.WebTesting;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; HtmlAgilityPack;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;WebTest1Coded&lt;/font&gt;&lt;font size="2"&gt; : &lt;/font&gt;&lt;font color="#008080" size="2"&gt;WebTest&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;IEnumerator&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;WebTestRequest&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; GetRequestEnumerator()&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;font color="#008080" size="2"&gt;WebTestRequest&lt;/font&gt;&lt;font size="2"&gt; request1 = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;WebTestRequest&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;"http://www.microsoft.com/"&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;request1.ValidateResponse += &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;EventHandler&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;ValidationEventArgs&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;(request1_ValidateResponse);&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;yield&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;font size="2"&gt; request1;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; request1_ValidateResponse(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;object&lt;/font&gt;&lt;font size="2"&gt; sender, &lt;/font&gt;&lt;font color="#008080" size="2"&gt;ValidationEventArgs&lt;/font&gt;&lt;font size="2"&gt; e)&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;font color="#008000" size="2"&gt;//load the response body string as an HtmlAgilityPack.HtmlDocument&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;HtmlAgilityPack.&lt;/font&gt;&lt;font color="#008080" size="2"&gt;HtmlDocument&lt;/font&gt;&lt;font size="2"&gt; doc = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; HtmlAgilityPack.&lt;/font&gt;&lt;font color="#008080" size="2"&gt;HtmlDocument&lt;/font&gt;&lt;font size="2"&gt;();&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;doc.LoadHtml(e.Response.BodyString);&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#008000" size="2"&gt;//locate the "Nav" element&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#008080" size="2"&gt;HtmlNode&lt;/font&gt;&lt;font size="2"&gt; navNode = doc.GetElementbyId(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;"Nav"&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#008000" size="2"&gt;//pick the first &amp;lt;li&amp;gt; element&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font color="#008080" size="2"&gt;HtmlNode&lt;/font&gt;&lt;font size="2"&gt; firstNavItemNode = navNode.SelectSingleNode(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;".//li"&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#008000" size="2"&gt;//validate the first list item in the Nav element says "Windows"&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;e.IsValid = firstNavItemNode.InnerText == &lt;/font&gt;&lt;font color="#800000" size="2"&gt;"Windows"&lt;/font&gt;&lt;font size="2"&gt;;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;div style="display: none" id="c_jquery_test"&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1930199.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2011/01/07/1930199.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/11/04/1869273.html</id><title type="text">Jquery each</title><summary type="text">json="[{"Id":6065,"TenantID":100001,"FromUserId":"100002","ToUserId":100000001,"Subject":"标题","Content":"内容","SendMode":1,"SendTime":"2010-11-04 16:55","MessageType":3,"FK_MessageCategory_ID":0,"Actio...</summary><published>2010-11-04T10:10:00Z</published><updated>2010-11-04T10:10:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/11/04/1869273.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/11/04/1869273.html"/><content type="html">&lt;div  role="tabpanel" selected="true"&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;json="[{"Id":6065,"TenantID":100001,"FromUserId":"100002","ToUserId":100000001,"Subject":"标题",&lt;/code&gt;&lt;/pre&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;"Content":"内&lt;/code&gt;&lt;code  role="listitem"&gt;容","SendMode":1,"SendTime":"2010-11-04 16:55","MessageType":3,&lt;/code&gt;&lt;/pre&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;"FK_MessageCategory_ID":0,"ActionLink"&lt;/code&gt;&lt;code  role="listitem"&gt;:"个人报告地址","Status":0}]";&lt;/code&gt;&lt;/pre&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;&lt;/code&gt;&amp;nbsp;json=eval(json);&lt;/pre&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;$.each(json,function(){&lt;/code&gt;&lt;/pre&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;alert(this.Id);&lt;/code&gt;&lt;/pre&gt;&lt;pre role="list"&gt;&lt;code  role="listitem"&gt;});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1869273.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/11/04/1869273.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/11/01/1866492.html</id><title type="text">堆？栈？(转）</title><summary type="text">堆栈在计算机领域，堆栈是一个不容忽视的概念，但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。要点：堆：顺序随意栈：先进后出堆和栈的区别 一、预备知识&amp;#8212;程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区（stack）&amp;#8212; 由编译器自动分配释放 ，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区（heap） ...</summary><published>2010-11-01T10:36:00Z</published><updated>2010-11-01T10:36:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/11/01/1866492.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/11/01/1866492.html"/><content type="html">&lt;p&gt;堆栈&lt;br /&gt;在计算机领域，堆栈是一个不容忽视的概念，但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。&lt;/p&gt;&#xD;
&lt;p&gt;要点：&lt;/p&gt;&#xD;
&lt;p&gt;堆：顺序随意&lt;/p&gt;&#xD;
&lt;p&gt;栈：先进后出&lt;/p&gt;&#xD;
&lt;p&gt;堆和栈的区别 &lt;/p&gt;&#xD;
&lt;p&gt;一、预备知识&amp;#8212;程序的内存分配 &lt;/p&gt;&#xD;
&lt;p&gt;一个由c/C++编译的程序占用的内存分为以下几个部分 &lt;/p&gt;&#xD;
&lt;p&gt;1、栈区（stack）&amp;#8212; 由编译器自动分配释放 ，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。 &lt;/p&gt;&#xD;
&lt;p&gt;2、堆区（heap） &amp;#8212; 一般由程序员分配释放， 若程序员不释放，程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表，呵呵。 &lt;/p&gt;&#xD;
&lt;p&gt;3、全局区（静态区）（static）&amp;#8212;，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域， 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 &lt;/p&gt;&#xD;
&lt;p&gt;4、文字常量区 &amp;#8212;常量字符串就是放在这里的。 程序结束后由系统释放 &lt;/p&gt;&#xD;
&lt;p&gt;5、程序代码区&amp;#8212;存放函数体的二进制代码。 &lt;/p&gt;&#xD;
&lt;p&gt;二、例子程序 &lt;/p&gt;&#xD;
&lt;p&gt;这是一个前辈写的，非常详细 &lt;/p&gt;&#xD;
&lt;p&gt;//main.cpp &lt;/p&gt;&#xD;
&lt;p&gt;int a = 0; 全局初始化区 &lt;/p&gt;&#xD;
&lt;p&gt;char *p1; 全局未初始化区 &lt;/p&gt;&#xD;
&lt;p&gt;main() &lt;/p&gt;&#xD;
&lt;p&gt;{ &lt;/p&gt;&#xD;
&lt;p&gt;int b; 栈 &lt;/p&gt;&#xD;
&lt;p&gt;char s[] = "abc"; 栈 &lt;/p&gt;&#xD;
&lt;p&gt;char *p2; 栈 &lt;/p&gt;&#xD;
&lt;p&gt;char *p3 = "123456"; 123456\0在常量区，p3在栈上。 &lt;/p&gt;&#xD;
&lt;p&gt;static int c =0； 全局（静态）初始化区 &lt;/p&gt;&#xD;
&lt;p&gt;p1 = (char *)malloc(10); &lt;/p&gt;&#xD;
&lt;p&gt;p2 = (char *)malloc(20); &lt;/p&gt;&#xD;
&lt;p&gt;分配得来得10和20字节的区域就在堆区。 &lt;/p&gt;&#xD;
&lt;p&gt;strcpy(p1, "123456"); 123456\0放在常量区，编译器可能会将它与p3所指向的"123456"优化成一个地方。 &lt;/p&gt;&#xD;
&lt;p&gt;} &lt;/p&gt;&#xD;
&lt;p&gt;二、堆和栈的理论知识 &lt;/p&gt;&#xD;
&lt;p&gt;2.1申请方式 &lt;/p&gt;&#xD;
&lt;p&gt;stack: &lt;/p&gt;&#xD;
&lt;p&gt;由系统自动分配。 例如，声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 &lt;/p&gt;&#xD;
&lt;p&gt;heap: &lt;/p&gt;&#xD;
&lt;p&gt;需要程序员自己申请，并指明大小，在c中malloc函数 &lt;/p&gt;&#xD;
&lt;p&gt;如p1 = (char *)malloc(10); &lt;/p&gt;&#xD;
&lt;p&gt;在C++中用new运算符 &lt;/p&gt;&#xD;
&lt;p&gt;如p2 = (char *)malloc(10); &lt;/p&gt;&#xD;
&lt;p&gt;但是注意p1、p2本身是在栈中的。 &lt;/p&gt;&#xD;
&lt;p&gt;2.2 &lt;/p&gt;&#xD;
&lt;p&gt;申请后系统的响应 &lt;/p&gt;&#xD;
&lt;p&gt;栈：只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。 &lt;/p&gt;&#xD;
&lt;p&gt;堆：首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时， &lt;/p&gt;&#xD;
&lt;p&gt;会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后将该结点从空闲结点链表中删除，并将该结点的空间分配给程序，另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分配的大小，这样，代码中的delete语句才能正确的释放本内存空间。另外，由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动的将多余的那部分重新放入空闲链表中。&amp;nbsp; &lt;br /&gt;2.3申请大小的限制 &lt;/p&gt;&#xD;
&lt;p&gt;栈：在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在 WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小。 &lt;/p&gt;&#xD;
&lt;p&gt;堆：堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。 &lt;/p&gt;&#xD;
&lt;p&gt;2.4申请效率的比较： &lt;/p&gt;&#xD;
&lt;p&gt;栈由系统自动分配，速度较快。但程序员是无法控制的。 &lt;/p&gt;&#xD;
&lt;p&gt;堆是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便. &lt;/p&gt;&#xD;
&lt;p&gt;另外，在WINDOWS下，最好的方式是用VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活 &lt;/p&gt;&#xD;
&lt;p&gt;2.5堆和栈中的存储内容 &lt;/p&gt;&#xD;
&lt;p&gt;栈： 在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变量。注意静态变量是不入栈的。 &lt;/p&gt;&#xD;
&lt;p&gt;当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主函数中的下一条指令，程序由该点继续运行。 &lt;/p&gt;&#xD;
&lt;p&gt;堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 &lt;/p&gt;&#xD;
&lt;p&gt;2.6存取效率的比较 &lt;/p&gt;&#xD;
&lt;p&gt;char s1[] = "aaaaaaaaaaaaaaa"; &lt;/p&gt;&#xD;
&lt;p&gt;char *s2 = "bbbbbbbbbbbbbbbbb"; &lt;/p&gt;&#xD;
&lt;p&gt;aaaaaaaaaaa是在运行时刻赋值的； &lt;/p&gt;&#xD;
&lt;p&gt;而bbbbbbbbbbb是在编译时就确定的； &lt;/p&gt;&#xD;
&lt;p&gt;但是，在以后的存取中，在栈上的数组比指针所指向的字符串(例如堆)快。 &lt;/p&gt;&#xD;
&lt;p&gt;比如： &lt;/p&gt;&#xD;
&lt;p&gt;#include &lt;/p&gt;&#xD;
&lt;p&gt;void main() &lt;/p&gt;&#xD;
&lt;p&gt;{ &lt;/p&gt;&#xD;
&lt;p&gt;char a = 1; &lt;/p&gt;&#xD;
&lt;p&gt;char c[] = "1234567890"; &lt;/p&gt;&#xD;
&lt;p&gt;char *p ="1234567890"; &lt;/p&gt;&#xD;
&lt;p&gt;a = c[1]; &lt;/p&gt;&#xD;
&lt;p&gt;a = p[1]; &lt;/p&gt;&#xD;
&lt;p&gt;return; &lt;/p&gt;&#xD;
&lt;p&gt;} &lt;/p&gt;&#xD;
&lt;p&gt;对应的汇编代码 &lt;/p&gt;&#xD;
&lt;p&gt;10: a = c[1]; &lt;/p&gt;&#xD;
&lt;p&gt;00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] &lt;/p&gt;&#xD;
&lt;p&gt;0040106A 88 4D FC mov byte ptr [ebp-4],cl &lt;/p&gt;&#xD;
&lt;p&gt;11: a = p[1]; &lt;/p&gt;&#xD;
&lt;p&gt;0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] &lt;/p&gt;&#xD;
&lt;p&gt;00401070 8A 42 01 mov al,byte ptr [edx+1] &lt;/p&gt;&#xD;
&lt;p&gt;00401073 88 45 FC mov byte ptr [ebp-4],al &lt;/p&gt;&#xD;
&lt;p&gt;第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据edx读取字符，显然慢了。 &lt;br /&gt;2.7小结： &lt;/p&gt;&#xD;
&lt;p&gt;堆和栈的区别可以用如下的比喻来看出： &lt;/p&gt;&#xD;
&lt;p&gt;使用栈就象我们去饭馆里吃饭，只管点菜（发出申请）、付钱、和吃（使用），吃饱了就走，不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作，他的好处是快捷，但是自由度小。 &lt;/p&gt;&#xD;
&lt;p&gt;使用堆就象是自己动手做喜欢吃的菜肴，比较麻烦，但是比较符合自己的口味，而且自由度大。 &lt;/p&gt;&#xD;
&lt;p&gt;堆和栈的区别主要分： &lt;/p&gt;&#xD;
&lt;p&gt;操作系统方面的堆和栈，如上面说的那些，不多说了。 &lt;/p&gt;&#xD;
&lt;p&gt;还有就是数据结构方面的堆和栈，这些都是不同的概念。这里的堆实际上指的就是（满足堆性质的）优先队列的一种数据结构，第1个元素有最高的优先权；栈实际上就是满足先进后出的性质的数学或数据结构。 &lt;/p&gt;&#xD;
&lt;p&gt;虽然堆栈，堆栈的说法是连起来叫，但是他们还是有很大区别的，连着叫只是由于历史的原因。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;本文来自CSDN博客，转载请标明出处：&lt;a href="http://blog.csdn.net/zlp8383178/archive/2007/06/19/1657897.aspx"&gt;http://blog.csdn.net/zlp8383178/archive/2007/06/19/1657897.aspx&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1866492.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/11/01/1866492.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/10/29/1864776.html</id><title type="text">数据库并发控制！！！</title><summary type="text">实验环境：wVisual Studio .NET 2005wSQL Server 2005w其它说明：wSQL Server 2000 + VS.NET 2003 也可以w需要对代码做细微调整w源代码及数据库见附件设某银行存款帐户数据如下表：w现在要求编写一程序，完成两项功能：存款与取款。每次操作完成后向明细表中插入一行记录并更新帐户余额并发控制案例解决办法：w&amp;#9312; 读取最后一行记录的帐...</summary><published>2010-10-29T13:49:00Z</published><updated>2010-10-29T13:49:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/10/29/1864776.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/10/29/1864776.html"/><content type="html">&lt;div&gt;&lt;span style="font-family: 宋体"&gt;实验环境：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;Visual Studio .NET 2005&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;SQL Server 2005&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;其它说明：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;SQL Server 2000 + VS.NET 2003 &lt;span style="font-family: 宋体"&gt;也可以&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;需要对代码做细微调整&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;源代码及数据库见附件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;设某银行存款帐户数据如下表：&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;现在要求编写一程序，完成两项功能：存款与取款。每次操作完成后向明细表中插入一行记录并更新帐户余额&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: 16pt"&gt;并发控制案例&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: 16pt"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/2.jpg" width="404" height="305" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"&gt;&lt;span style="font-family: Wingdings; font-size: 7.5pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;解决办法：&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;&amp;#9312;&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;读取最后一行记录的帐户余额数据&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;&amp;#9313;&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;根据存、取款金额计算出新的帐户余额&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;&amp;#9314;&lt;/span&gt; &lt;span style="font-family: 宋体"&gt;将新的记录插入表中&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;真的这么简单？&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在不考虑并发问题的情况下是可行的&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;如果考虑并发，问题就多了&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/4.jpg" width="397" height="300" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;问题所在：并发问题！&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;解决办法：加锁！&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;在读最后一条记录时先加上锁。&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;怎么加锁？加什么锁？&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;读之前加共享锁？&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;读之前加排它锁？&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/6.jpg" width="394" height="291" /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/strong&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: 16pt"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/7.jpg" width="400" height="297" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;如何读取帐户余额？&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT TOP 1 &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;帐户余额&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;帐户明细&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;序号&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt; &lt;span&gt;DESC&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;存在的问题：&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;在并发场景下你怎么确定它一定是最后一行？&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;随着数据量增大越来越没效率（因为需要排序）&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;&lt;/span&gt;&lt;/strong&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/9.jpg" width="397" height="304" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li style="margin: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;为什么引入冗余数据？&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;确保帐户余额在唯一的地方进行存储&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;避免了读取帐户余额时访问大量数据并排序&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt; mso-list: l0 level3 lfo1; tab-stops: list 108.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;&amp;#167;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;新问题：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;我们无法直接对数据库进行锁操作&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;必须通过合理的事务隔离级别完成并发控制&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt; mso-list: l0 level3 lfo1; tab-stops: list 108.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;&amp;#167;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;ReadUnCommitted &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt; mso-list: l0 level3 lfo1; tab-stops: list 108.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;&amp;#167;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;ReadCommitted &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt; mso-list: l0 level3 lfo1; tab-stops: list 108.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;&amp;#167;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;RepeatableRead &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt; mso-list: l0 level3 lfo1; tab-stops: list 108.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;&amp;#167;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Serializable &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/strong&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: 16pt"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li style="margin: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;看来我们必须对各事务隔离级别逐一分析&lt;/span&gt;&lt;/li&gt;&lt;li style="margin: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&amp;#9312;&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;span lang="EN-US"&gt;ReadUnCommitted &lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;显然不行&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;在这个事务隔离级别下连脏数据都可能读到，何况&amp;#8220;脏&amp;#8221;帐户余额数据。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&amp;#9313;&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;span lang="EN-US"&gt;ReadCommitted &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;也不行&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" lang="EN-US"&gt;&lt;span style="mso-list: Ignore"&gt;w&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;该隔离级别与二级封锁协议相对应。读数据前加共享锁，读完就释放。前面分析过，此处不再赘述。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;&amp;#9314;&lt;/span&gt; RepeatableRead &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;这个隔离级别比较迷惑人，需要仔细分析：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;RepeatableRead&lt;span style="font-family: 宋体"&gt;对应第三级封锁协议：读前加共享锁，事务完成才释放。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;例：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;假设事务&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;执行存钱操作，首先对帐户余额加&lt;/span&gt;S&lt;span style="font-family: 宋体"&gt;锁，然后修改数据。此时事务&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;要想改帐户余额，它必须先加&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁（自然加不上），所以无法完成操作。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;这似乎避免了并发问题的发生，在一个事务执行时将另一个事务的修改请求暂时阻塞，直到事务完成。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;但真的能满足应用程序的需要吗？&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/span&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/13.jpg" width="401" height="298" /&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;可见&lt;/span&gt;RepeatableRead&lt;span style="font-family: 宋体"&gt;事务隔离级别容易造成死锁。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一旦出现死锁，&lt;/span&gt;DMBS&lt;span style="font-family: 宋体"&gt;不得不牺牲一个进程。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;牺牲进程换来的是不会出现并发异常。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;&amp;#9315;&lt;/span&gt; Serializable &lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;该事务隔离级别在执行时可以避免幻影读。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;但对于本案例执行效果与&lt;/span&gt;RepeatableRead&lt;span style="font-family: 宋体"&gt;一样。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;似乎走到了绝路&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;连最高隔离级别都会在高度并发时因为死锁造成很大一部分事务执行失败&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;原因分析&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;死锁的原因是因为读前加&lt;/span&gt;S&lt;span style="font-family: 宋体"&gt;锁，而写前要将&lt;/span&gt;S&lt;span style="font-family: 宋体"&gt;锁提升为&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁，由于&lt;/span&gt;S&lt;span style="font-family: 宋体"&gt;锁允许共享，导致&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁提升失败，产生死锁。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;解决办法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;如果在读时就加上&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁，就可避免上述问题&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;从封锁协议角度这似乎不可能，但确完全可行！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;解决办法：&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;其实&lt;/span&gt;SQL Server&lt;span style="font-family: 宋体"&gt;允许在一条命令中同时完成读、写操作，这就为我们提供了入手点。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在更新帐户余额的同时读取帐户余额，就等同于在读数据前加&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁。命令如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;UPDATE Account &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @newBalance = &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Balance = Balance + 100&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE AccountID = 1&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;上面的命令对帐户余额增加&lt;/span&gt;100&lt;span style="font-family: 宋体"&gt;元（蓝色部分）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;同时读取更新后的帐户余额到变量&lt;/span&gt;@newBalance&lt;span style="font-family: 宋体"&gt;中&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;由于读取操作融入写操作中，实现了读时加&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁，避免因锁的提升造成死锁。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;span style="font-family: 黑体; color: black; font-size: 28pt; mso-ascii-font-family: Verdana; mso-fareast-font-family: 黑体; mso-bidi-font-family: +mn-cs; language: zh-CN; mso-color-index: 1"&gt;完成存取款的操作可由下面的伪代码实现&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/p&gt;&#xD;
&lt;p&gt;@amount = &lt;span style="font-family: 宋体"&gt;存取款的金额&lt;/span&gt;&lt;br /&gt;BEGIN TRANSACTION&lt;br /&gt;Try&lt;br /&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;UPDATE Account&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @newBalance = Balance = Balance + @amount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE AccountID = 1&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; INSERT INTO AccountDetail (AccountID, Amount, Balance)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES (1, @amount, @newBalance) &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;COMMIT&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;br /&gt;Catch&lt;br /&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; ROLLBACK&lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;改造结果：&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;通过上述改造，事务中只有写操作而没有了读操作&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;因此甚至将事务隔离级别设置为&lt;/span&gt;ReadUnCommitted&lt;span style="font-family: 宋体"&gt;都能确保成功执行&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;写前加&lt;/span&gt;X&lt;span style="font-family: 宋体"&gt;锁，避免了因提升&lt;/span&gt;S&lt;span style="font-family: 宋体"&gt;锁造成死锁的可能&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;实验结果：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;所有并行执行的事务全部成功&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;帐户余额全部正确&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;程序执行时间同串行执行各事务相同&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt" &gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;解决办法：&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;使用存储过程&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 108pt"&gt;&lt;span style="font-family: Wingdings"&gt;&amp;#167;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;修改后的更新过程：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;、将存、取款用到的数据通过网络发给存储过程。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;、数据加锁、修改、解锁。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;3&lt;span style="font-family: 宋体"&gt;、将结果通过网络回传。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;将网络延迟放到了事务之外，提高了事务效率。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;还有可优化的余地&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;网络带宽受到限制时，数据在网络上传输的时间往往比对数据进行读写操作的时间要长。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一个典型的更新过程：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;、读前加锁&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;、帐户数据从网上传过来&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;3&lt;span style="font-family: 宋体"&gt;、修改、插入新记录&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;4&lt;span style="font-family: 宋体"&gt;、将改后的数据通过网络传回去&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;5&lt;span style="font-family: 宋体"&gt;、数据库提交更新并解锁。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果网速很慢，资源锁定时间就很长。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ul style="margin-top: 0cm" type="square"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;实验结果&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;由于在同一台机器上执行数据库与应用程序，实验结果表明存储过程的执行效率不如直接在应用程序中通过命令调用高。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -18pt; margin: 0cm 0cm 0pt 72pt"&gt;&lt;span style="font-family: Wingdings"&gt;w&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;如果能在一个带宽受到限制的网络上将数据库与应用程序分离，然后测试，相信会有令人满意的结果。（有待具体实验证实）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1864776.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/10/29/1864776.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/10/28/1863258.html</id><title type="text">Velocity脚本简明教程</title><summary type="text">Velocity脚本简明教程 转（http://home.beisencorp.com/space.php?uid=232&amp;amp;do=blog&amp;amp;id=984）　　很多人下载了EasyJWeb的开源应用示例，但是对动态页面模板文件中的标签使用不是很熟悉，这里简单介绍一下。EasyJWeb特定把视图限定为Velocity，因为我们觉得在Velocity在表现上从可维护性、简洁性乃灵活性上，...</summary><published>2010-10-28T03:11:00Z</published><updated>2010-10-28T03:11:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/10/28/1863258.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/10/28/1863258.html"/><content type="html">&lt;h1 &gt;&lt;a id="ctl04_TitleUrl"  href="http://www.cnblogs.com/yasin/archive/2010/04/02/1703188.html"&gt;&lt;font color="#6466b3"&gt;Velocity脚本简明教程&lt;/font&gt;&lt;/a&gt; 转（&lt;a href="http://home.beisencorp.com/space.php?uid=232&amp;amp;do=blog&amp;amp;id=984"&gt;http://home.beisencorp.com/space.php?uid=232&amp;amp;do=blog&amp;amp;id=984&lt;/a&gt;）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ececec" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="font-size: 14px" bgcolor="#ffffff"&gt;　　很多人下载了EasyJWeb的开源应用示例，但是对动态页面模板文件中的标签使用不是很熟悉，这里简单介绍一下。EasyJWeb特定把视图限定为Velocity，因为我们觉得在Velocity在表现上从可维护性、简洁性乃灵活性上，比JSP及其它视力技术表现强得多。虽然我们可以非常简单把EasyJWeb扩展成支持多种视力技术，但当前我们不打算这样做！&lt;br /&gt;　　使用EasyJWeb的目的，是在于把页面－程序完成分开，就也就是一个项目中，程序员使用专业Java开发工具（如Eclipse、JBuilder等)来编写、调试、测试程序，页面制作人员使用专业的网页制作工具（如Macromedia Dreamweaver）来设计制作网页，而两者之间的协调通过一个规范的接口协议来解决。需要在页面里面加如一些标签，来生成动态内容，这一工作可以交由网页制作人员来完成。因为使用Velocity作为视图，由于他的语法、功能及使用方法都比较简单，因此一般情况下，一天以内就能让页面制作人员熟练掌握其用法。&lt;br /&gt;　　Velocity是一个基于java的模板引擎（template engine），它允许任何人仅仅简单的使用模板语言（template language）来引用由java代码定义的对象。作为一个比较完善的模板引擎，Velocity的功能是比较强大的，但强大的同时也增加了应用复杂性。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ececec" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td bgcolor="#ffffff" height="25"&gt;&#xD;
&lt;p&gt;&lt;font color="#003399"&gt;&lt;strong&gt;&lt;a name="intro"&gt;&lt;/a&gt;一、基本语法&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td bgcolor="#f6f6f4" valign="top" align="left"&gt;&#xD;
&lt;div align="left"&gt;&lt;strong&gt;1、"#"用来标识Velocity的脚本语句&lt;/strong&gt;，包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等；&lt;br /&gt;如:&lt;br /&gt;#if($info.imgs)&lt;br /&gt;&amp;lt;img src="$info.imgs" border=0&amp;gt;&lt;br /&gt;#else&lt;br /&gt;&amp;lt;img src="noPhoto.jpg"&amp;gt;&lt;br /&gt;#end&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2、"$"用来标识一个对象(或理解为变量)；&lt;/strong&gt;如&lt;br /&gt;如：$i、$msg、$TagUtil.options(...)等。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3、"{}"用来明确标识Velocity变量；&lt;/strong&gt;&lt;br /&gt;比如在页面中，页面中有一个$someonename，此时，Velocity将把someonename作为变量名，若我们程序是想在someone这个变量的后面紧接着显示name字符，则上面的标签应该改成${someone}name。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4、"!"用来强制把不存在的变量显示为空白。&lt;/strong&gt;&lt;br /&gt;如当页面中包含$msg，如果msg对象有值，将显示msg的值，如果不存在msg对象同，则在页面中将显示$msg字符。这是我们不希望的，为了把不存在的变量或变量值为null的对象显示为空白，则只需要在变量名前加一个&amp;#8220;!&amp;#8221;号即可。&lt;br /&gt;如：$!msg&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ececec" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td bgcolor="#ffffff" height="25"&gt;&#xD;
&lt;p&gt;&lt;font color="#003399"&gt;&lt;strong&gt;&lt;a name="intro"&gt;&lt;/a&gt;二、在EasyJWeb中的最佳实践&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td bgcolor="#f6f6f4" valign="top" align="left"&gt;&#xD;
&lt;div align="left"&gt;&amp;nbsp; 　　理论上你可以在EasyjWeb模板使用所有Velocity的脚本及功能，但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式，在万不得已的情况下，不要在界面模板中加入任何复杂的逻辑，更不要在界面模板中加入变量声明、逻辑运算符等等。 &#xD;
&lt;p&gt;在EasyJWeb中，我们提供了五条基本的模板脚本语句，基本上就能满足所有应用模板的要求。这四条模板语句很简单，可以直接由界面设计人员来添加。在当前很多EasyJWeb的应用实践中，我们看到，所有界面模板中归纳起来只有下面四种简单模板脚本语句即可实现：&lt;br /&gt;　　 &lt;strong&gt;1、$!obj 　直接返回对象结果。&lt;/strong&gt;&lt;br /&gt;　　 如：在html标签中显示java对象msg的值。&amp;lt;p&amp;gt;$!msg&amp;lt;/p&amp;gt;&lt;br /&gt;　 在html标签中显示经过HtmlUtil对象处理过后的msg对象的值　　&amp;lt;p&amp;gt;$!HtmlUtil.doSomething($!msg)&amp;lt;/p&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2、#if($!obj) #else #end 判断语句&lt;/strong&gt;&lt;br /&gt;　　 如：在EasyJWeb各种开源应用中，我们经常看到的用于弹出提示信息msg的例子。&lt;br /&gt;　　 #if($msg)&lt;br /&gt;　　 &amp;lt;script&amp;gt;&lt;br /&gt;　　 alert('$!msg');&lt;br /&gt;　　 &amp;lt;/script&amp;gt;&lt;br /&gt;　　 #end&lt;br /&gt;上面的脚本表示当对象msg对象存在时，输出&amp;lt;script&amp;gt;等后面的内容。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;　3、#foreach( $info in $list) $info.someList #end&lt;/strong&gt;　　&lt;strong&gt;循环读取集合list中的对象，并作相应的处理。&lt;/strong&gt;&lt;br /&gt;　　 如：EasyJF开源论坛系统中论(0.3)坛首页显示热门主题的html界面模板脚本：&lt;br /&gt;　　#foreach( $info in $hotList1) &lt;br /&gt;&amp;lt;a href="/bbsdoc.ejf?easyJWebCommand=show&amp;amp;&amp;amp;cid=$!info.cid" target="_blank"&amp;gt;$!info.title&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;　　　 #end &lt;br /&gt;　　 上面的脚本表示循环遍历hotList1集合中的对象，并输出对象的相关内容。&lt;br /&gt;　　 &lt;br /&gt;　　 &lt;strong&gt;4、#macro(macroName)#end 脚本函数(宏)调用，不推荐在界面模板中大量使用。&lt;/strong&gt;&lt;br /&gt;　　 如：在使用EasyJWeb Tools快速生成的添删改查示例中，可以点击列表的标题栏进行升降排序显示，这是我们在EasyJWeb应用中经常看到的一个排序状态显示的模板内容。&lt;br /&gt;　　 函数(宏)定义，一般放在最前面&lt;br /&gt;　　 #macro(orderPic $type)&lt;br /&gt;　　 #if ($orderField.equals($type)) &lt;br /&gt;　　 &amp;lt;img src="http://images.cnblogs.com/ico/${orderType}.gif"&amp;gt; &lt;br /&gt;　　 #end&lt;br /&gt;　　 #end&lt;br /&gt;具体的调用如：&amp;lt;font color="#FFFFFF"&amp;gt;头衔#orderPic("title")&amp;lt;/font&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5、包含文件#inclue("模板文件名")或#parse("模板文件名")&lt;/strong&gt;&lt;br /&gt;　　主要用于处理具有相同内容的页面，比如每个网站的顶部或尾部内容。&lt;br /&gt;　　使用方法，可以参考EasyJF开源Blog及EasyJF开源论坛中的应用！&lt;br /&gt;　　如：#parse("/blog/top.html")或#include("/blog/top.html")&lt;br /&gt;　　parse与include的区别在于，若包含的文件中有Velocity脚本标签，将会进一步解析，而include将原样显示。&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ececec" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td bgcolor="#ffffff" height="25"&gt;&#xD;
&lt;p&gt;&lt;font color="#003399"&gt;&lt;strong&gt;&lt;a name="intro"&gt;&lt;/a&gt;三、关于#set的使用&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td bgcolor="#f6f6f4" valign="top" align="left"&gt;&#xD;
&lt;div align="left"&gt;　　在万不得已的时候，不要在页面视图自己声明Velocity脚本变量，也就是尽量少使用#set。有时候我们需要在页面中显示序号，而程序对象中又没有包含这个序号属性同，可以自己定义。如在一个循环体系中，如下所示：&lt;br /&gt;　　#set ($i=0)&lt;br /&gt;　　#foreach($info in $list)&lt;br /&gt;　　序号:$i&lt;br /&gt;　　#set($i=$i+1)&lt;br /&gt;　　#end&lt;br /&gt;　&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ececec" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td bgcolor="#ffffff" height="25"&gt;&#xD;
&lt;p&gt;&lt;font color="#003399"&gt;&lt;strong&gt;&lt;a name="intro"&gt;&lt;/a&gt;四、Velocity脚本语法摘要&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td bgcolor="#f6f6f4" valign="top" align="left"&gt;&#xD;
&lt;div align="left"&gt;&lt;strong&gt;1、声明:#set ($var=XXX)&lt;/strong&gt;&lt;br /&gt;　　左边可以是以下的内容&lt;br /&gt;　　Variable reference &lt;br /&gt;　　String literal &lt;br /&gt;　　Property reference &lt;br /&gt;　　Method reference &lt;br /&gt;　　Number literal #set ($i=1) &lt;br /&gt;　　ArrayList #set ($arr=["yt1","t2"])&lt;br /&gt;　　算术运算符&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2、注释:&lt;/strong&gt;&lt;br /&gt;　　单行## XXX&lt;br /&gt;　　多行#* xxx&lt;br /&gt;　　xxxx&lt;br /&gt;　　xxxxxxxxxxxx*#&lt;br /&gt;&lt;br /&gt;　　References 引用的类型&lt;br /&gt;&lt;strong&gt;3、变量 Variables&lt;/strong&gt; &lt;br /&gt;　　以 "$" 开头，第一个字符必须为字母。character followed by a VTL Identifier. (a .. z or A .. Z).&lt;br /&gt;　　变量可以包含的字符有以下内容：&lt;br /&gt;　　alphabetic (a .. z, A .. Z) &lt;br /&gt;　　numeric (0 .. 9) &lt;br /&gt;　　hyphen ("-") &lt;br /&gt;　　underscore ("_") &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4、Properties&lt;/strong&gt; &lt;br /&gt;　　$Identifier.Identifier&lt;br /&gt;　　$user.name&lt;br /&gt;　　hashtable user中的的name值.类似：user.get("name")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5、Methods &lt;/strong&gt;&lt;br /&gt;　　object user.getName() = $user.getName()&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6、Formal Reference Notation&lt;/strong&gt; &lt;br /&gt;　　用{}把变量名跟字符串分开 &lt;br /&gt;&lt;br /&gt;　　如&lt;br /&gt;　　#set ($user="csy"}&lt;br /&gt;　　${user}name &lt;br /&gt;　　返回csyname&lt;br /&gt;&lt;br /&gt;　　$username&lt;br /&gt;　　$!username&lt;br /&gt;　　$与$!的区别&lt;br /&gt;　　当找不到username的时候，$username返回字符串"$username"，而$!username返回空字符串"" &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;7、双引号 与 引号&lt;/strong&gt; &lt;br /&gt;　　#set ($var="helo")&lt;br /&gt;　　test"$var" 返回testhello&lt;br /&gt;　　test'$var' 返回test'$var'&lt;br /&gt;　　可以通过设置 stringliterals.interpolate=false改变默认处理方式&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;8、条件语句&lt;/strong&gt;&lt;br /&gt;　　#if( $foo ) &lt;br /&gt;　　 &amp;lt;strong&amp;gt;Velocity!&amp;lt;/strong&amp;gt;&lt;br /&gt;　　#end&lt;br /&gt;　　#if($foo)&lt;br /&gt;　　#elseif()&lt;br /&gt;　　#else&lt;br /&gt;　　#end&lt;br /&gt;　　当$foo为null或为Boolean对象的false值执行.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;9、逻辑运算符:== &amp;amp;&amp;amp; || !&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;10、循环语句#foreach($var in $arrays ) &lt;/strong&gt;// 集合包含下面三种Vector, a Hashtable or an Array&lt;br /&gt;#end&lt;br /&gt;　　#foreach( $product in $allProducts )&lt;br /&gt;　　 &amp;lt;li&amp;gt;$product&amp;lt;/li&amp;gt;&lt;br /&gt;　　#end&lt;br /&gt;&lt;br /&gt;　　#foreach( $key in $allProducts.keySet() )&lt;br /&gt;　　 &amp;lt;li&amp;gt;Key: $key -&amp;gt; Value: $allProducts.get($key)&amp;lt;/li&amp;gt;&lt;br /&gt;　　#end&lt;br /&gt;&lt;br /&gt;　　#foreach( $customer in $customerList )&lt;br /&gt;　　 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;$velocityCount&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$customer.Name&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;　　#end&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;11、velocityCount变量在配置文件中定义&lt;/strong&gt;&lt;br /&gt;　　# Default name of the loop counter&lt;br /&gt;　　# variable reference.&lt;br /&gt;　　directive.foreach.counter.name = velocityCount&lt;br /&gt;　　# Default starting value of the loop&lt;br /&gt;　　# counter variable reference.&lt;br /&gt;　　directive.foreach.counter.initial.value = 1&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;12、包含文件&lt;/strong&gt; &lt;br /&gt;　　#include( "one.gif","two.txt","three.htm" )&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;13、Parse导入脚本&lt;/strong&gt;&lt;br /&gt;　　#parse("me.vm" )&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;14、#stop 停止执行并返回&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;15、定义宏Velocimacros ,相当于函数 支持包含功能&lt;/strong&gt;&lt;br /&gt;　　#macro( d )&lt;br /&gt;　　 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;　　#end&lt;br /&gt;　　调用 &lt;br /&gt;　　#d()&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;16、带参数的宏&lt;/strong&gt;&lt;br /&gt;　　#macro( tablerows $color $somelist )&lt;br /&gt;　　#foreach( $something in $somelist )&lt;br /&gt;　　 &amp;lt;tr&amp;gt;&amp;lt;td bgcolor=$color&amp;gt;$something&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;　　#end&lt;br /&gt;　　#end&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;17、Range Operator&lt;/strong&gt; &lt;br /&gt;　　#foreach( $foo in [1..5] )&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;table border="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;table border="0" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ececec" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td bgcolor="#ffffff" height="25"&gt;&#xD;
&lt;p&gt;&lt;font color="#003399"&gt;&lt;strong&gt;&lt;a name="intro"&gt;&lt;/a&gt;附：《浅析MVC框架中View层的优雅设计及实例》&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr bgcolor="#f6f6f4"&gt;&#xD;
&lt;td bgcolor="#f6f6f4" valign="top" align="left"&gt;&#xD;
&lt;div align="left"&gt;　　　　　作者：EasyJF开源团队 大峡 &#xD;
&lt;p&gt;在基于B/S的应用程序开发中，从基本的技术分工上来说就是两大块，一是软件显示界面，另一个是程序逻辑。在N年前的脚本语言时代，无论是asp、php还是jsp，我们基本是都是把这两者柔和在一起的。尽管我们想方设法做好很多函数或者包含文件来努力达到软件的复用，但仍然无法满足多变的用户需求,这主要是因为以前的纯脚本编码方式无法很好支持及应用面向对象(OO)领域中的强大功能。&lt;/p&gt;&#xD;
&lt;p&gt;在常见的B/S软件项目中，界面的设计包括html界面、Wap界面及其它由文本字符协议为基本表示的界面等。以我们接触最多的html页面为例子，在做这些界面的时候往往需要美工先使用photoshop或fireworks等图形界面设计工具进行全局设计，然后再使用进行Dreamweaver等html页面制作工具进行加工制作。而强大的程序逻辑及后台处理都是由服务器端程序完成，这些程序具有较高的稳定性，其开发工具如JBuilder、Eclipse等对View层的界面无法很好的支持(当然那些用记事本写界面的应用除外)，这就使得很多MVC框架的设计都无法两全齐美。&lt;/p&gt;&#xD;
&lt;p&gt;作位一个比较友好的MVC的框架，在简化服务器应用开发的同时，还需要在View这一层设计上不要过多的影响到界面人员的工作，最基本的要求就是不要过多的加入一些设计软件不支持的标签等元素(如Struts的很多标签在Dreamweaver中都不支持)。这里我们以EasyJWeb为例，探讨在View层如何实现比较合理的设计。&lt;/p&gt;&#xD;
&lt;p&gt;EasyJWeb作为一个快速Java Web MVC框架，其设计目标不尽是要简化软件开发人员的代码书写工作，更是要能方便界面设计人员的工作。&lt;/p&gt;&#xD;
&lt;p&gt;当然，要使界面能跟后台程序逻辑能融合，显示界面及程序逻辑之间需要一定的对话协议在所难免。EasyJWeb作为一个MVC框架，同样也存在着这样的对话协议，这就是EasyJWeb中的界面模板标识语言。&lt;/p&gt;&#xD;
&lt;p&gt;在当前发布的版本中，EasyJWeb界面模板标识语言使用的是Apache开源的Velocity模板引擎(template engine)，当然以后会根据际需要加入更多的模板引擎以供框架应用者选择。&lt;/p&gt;&#xD;
&lt;p&gt;Velocity是一个基于java的模板引擎（template engine），它允许任何人仅仅简单的使用模板语言（template language）来引用由java代码定义的对象。作为一个比较完善的模板引擎，Velocity的功能是比较强大的，但强大的同时也增加了应用复杂性。&lt;/p&gt;&#xD;
&lt;p&gt;理论上你可以在EasyjWeb模板使用所有Velocity的脚本及功能，但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式，在万不得已的情况下，不要在界面模板中加入任何复杂的逻辑，更不要在界面模板中加入变量声明、逻辑运算符等等。&lt;/p&gt;&#xD;
&lt;p&gt;在EasyJWeb中，我们提供了四条基本的模板脚本语句，基本上就能满足所有应用模板的要求。这四条模板语句很简单，可以直接由界面设计人员来添加。在当前很多EasyJWeb的应用实践中，我们看到，所有界面模板中归纳起来只有下面四种简单模板脚本语句即可实现：&lt;/p&gt;&#xD;
&lt;p&gt;1、$!obj 　直接返回对象结果。&lt;br /&gt;　　 &lt;br /&gt;　　 如：在html标签中显示java对象msg的值。&amp;lt;p&amp;gt;$!msg&amp;lt;/p&amp;gt;&lt;br /&gt;　　　　 在html标签中显示经过HtmlUtil对象处理过后的msg对象的值.&amp;lt;p&amp;gt;$!HtmlUtil.doSomething($!msg)&amp;lt;/p&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;2、#if($!obj) #else #end 判断语句&lt;/p&gt;&#xD;
&lt;p&gt;如：在EasyJWeb各种开源应用中，我们经常看到的用于弹出提示信息msg的例子。&lt;br /&gt;　　 #if($msg)&lt;br /&gt;　　 &amp;lt;script&amp;gt;&lt;br /&gt;　　 alert('$!msg');&lt;br /&gt;　　 &amp;lt;/script&amp;gt;&lt;br /&gt;　　 #end&lt;br /&gt;上面的脚本表示当对象msg对象存在时，输出&amp;lt;script&amp;gt;等后面的内容。&lt;/p&gt;&#xD;
&lt;p&gt;3、#foreach( $info in $list) $info.something #end　　循环读取集合list中的对象，并作相应的处理。&lt;br /&gt;　　 &lt;br /&gt;　　 如：EasyJF开源论坛系统中论坛首页显示热门主题的html界面模板脚本&lt;/p&gt;&#xD;
&lt;p&gt;#foreach( $info in $hotList1) &lt;br /&gt;&amp;lt;a href="/bbsdoc.ejf?easyJWebCommand=show&amp;amp;&amp;amp;cid=$!info.cid" target="_blank"&amp;gt;$!info.title&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;　　　 #end &lt;br /&gt;　　 上面的脚本表示循环遍历hotList1集合中的对象，并输出对象的相关内容。&lt;br /&gt;　　 &lt;br /&gt;　　 4、#macro(macroName)#end 脚本函数(宏)调用，不推荐在界面模板中大量使用。&lt;/p&gt;&#xD;
&lt;p&gt;如：在EasyJF简易订销管等系统中经常看到的一个排序状态显示的模板内容。&lt;br /&gt;　　 函数(宏)定义，一般放在最前面&lt;br /&gt;　　 #macro(orderPic $type)&lt;br /&gt;　　 #if ($orderField.equals($type)) &lt;br /&gt;　　 &amp;lt;img src="http://images.cnblogs.com/ico/${orderType}.gif"&amp;gt; &lt;br /&gt;　　 #end&lt;br /&gt;　　 #end&lt;/p&gt;&#xD;
&lt;p&gt;具体的调用如：&amp;lt;font color="#FFFFFF"&amp;gt;头衔#orderPic("title")&amp;lt;/font&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1863258.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/10/28/1863258.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846755.html</id><title type="text">Visual Studio的调试技巧</title><summary type="text">Visual Studio的调试技巧【原文地址】Debugging Tips with Visual Studio 2010【原文发表日期】 2010/8/19 10:48 AM这是我写的关于VS2010和.Net4发布的博客系列的第26篇。今天的博文包含了一些有用的能用于VS的调试技巧。 我的朋友Scott Cate（他写了很多很好的关于VS使用技巧和窍门的博客）最近向我强调了这些很好的技巧，大...</summary><published>2010-10-09T09:13:00Z</published><updated>2010-10-09T09:13:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846755.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846755.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a id="ctl00_mainContentContainer_ctl01" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl01',this);" href="http://msdn.microsoft.com/zh-cn/gg213858.aspx"&gt;&lt;font color="#0066dd"&gt;Visual Studio的调试技巧&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;【原文地址】&lt;a id="ctl00_mainContentContainer_ctl02" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl02',this);" href="http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx"&gt;&lt;font color="#0066dd"&gt;Debugging Tips with Visual Studio 2010&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;【原文发表日期】 2010/8/19 10:48 AM&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这是我写的关于VS2010和.Net4发布的博客系列的第26篇。&lt;/p&gt;&#xD;
&lt;p&gt;今天的博文包含了一些有用的能用于VS的调试技巧。 我的朋友&lt;a id="ctl00_mainContentContainer_ctl03" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl03',this);" href="http://scottcate.com/"&gt;&lt;font color="#0066dd"&gt;Scott Cate&lt;/font&gt;&lt;/a&gt;（他写了很多很好的关于VS使用技巧和窍门的&lt;a id="ctl00_mainContentContainer_ctl04" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl04',this);" href="http://scottcate.com/Tricks/"&gt;&lt;font color="#0066dd"&gt;博客&lt;/font&gt;&lt;/a&gt;）最近向我强调了这些很好的技巧，大部分使用VS的开发人员好像不知道这些技巧（即使他们大部分都在产品开发组呆过一阵子）。 如果你还没有使用过这些技巧，希望这篇博文能帮你发现它们。 它们学起来很容易，能帮你节省很多时间。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;运行到光标（Ctrl+ F10）&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我经常看见人们是这样来调试应用程序的： 他们在应用程序需要调试的代码前设置一个断点，然后反复的敲F10/F11来逐步通过代码，直到到达他们真正想要研究的确切位置。有些时候他们需要仔细观察所跨过的每行代码，这样使用F10/F11 就很合理。 但是更普遍的是，他们只想快点进入他们真正关心的那行代码&amp;#8212;&amp;#8212;这是使用F10/F11 就不是最好的选择了。&lt;/p&gt;&#xD;
&lt;p&gt;相反， 你可能想利用调试器支持的特性&amp;#8220;运行到光标&amp;#8221;。 只需简单地把你的光标放在代码中你想程序运行到的那一行，然后同时敲Ctrl+F10。这样程序就会运行到光标所在的那一行， 然后执行中止，由调试器控制&amp;#8212;&amp;#8212;这样就节约了你反复敲击F10/F11到达那里的时间。即使你想运行到的那行代码不在当前调试的方法或类里，而是在一个独立的方法或类里，这也同样奏效。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;条件断点&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们经常在可用性学习中见到另一个普遍的技巧：开发人员设置断点，运行程序，试着输入一些数据，当到达一个断点时，手工检查某种条件是不是成立，如果成立才决定进一步研究。 如果条件不符合他们想要的， 按F5继续执行程序，尝试另外一些输入，再手工重复同样的过程。&lt;/p&gt;&#xD;
&lt;p&gt;VS的条件断点功能提供了一个更加容易的方法来处理以上情况。 条件断点允许你只在某种明确指定的条件成立时才中止执行，由调试器控制。这帮你免于手动检查/恢复你的程序， 使得整个调试过程免去许多手工活，也不那么冗长乏味。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;设置一个条件断点&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;设置一个条件断点十分简单，在代码里按F9为某一行设置一个断点：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.1(zh-cn,MSDN.10).gif" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;然后右击断点&amp;#8212;&amp;#8212;编辑器左边的红色圆圈，在右键菜单中，选择&amp;#8220;条件&amp;#8230;&amp;#8221; ：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.2(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;将弹出以下对话框， 允许你指明某种条件，只有当这种条件成立时，断点才能达到。 例如：我们可以通过写下面的表达式来指明，只有当paginatedDinners列表元素的个数小于10时，才中止程序，由调试器控制。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.3(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在， 当我重新运行程序来研究一下， 调试器只在这个查找返回值小于10时，才中止程序执行。 如果返回值不小于10 ，将不会触发断点。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;命中次数功能&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有时你只想在条件第N次成立时中止执行。例如：仅当第5次出现查找返回值小于10时，才中止执行。你这样启用这个功能：右击断点， 选择&amp;#8220;命中次数&amp;#8230;&amp;#8221;菜单命令。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.4(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;将弹出以下对话框， 允许你指明程序中断的条件：条件被第N次满足时，或者条件被满足的次数是N的倍数时，或者条件被满足的次数大于等于N次时。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.5(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;机器/线程/进程筛选器&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你可以右击断点，选择&amp;#8220;筛选器&amp;#8230;&amp;#8221;菜单命令， 来指明断点只在某台特定的机器，或某个特定的进程或线程中才能被触发。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;跟踪点&amp;#8212;&amp;#8212;当击中断点时自定义行为&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;很多人不知道的一个调试功能是使用&lt;a id="ctl00_mainContentContainer_ctl05" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl05',this);" href="http://msdn.microsoft.com/en-us/library/232dxah7(v=VS.80).aspx"&gt;&lt;font color="#0066dd"&gt;跟踪点&lt;/font&gt;&lt;/a&gt;。 跟踪点是一个断点， 当它被击中时，某种自定义的宏会被触发执行。当你想研究你的应用程序而又不想中止执行程序时， 这个功能特别有用。&lt;/p&gt;&#xD;
&lt;p&gt;我将用一个简单的控制台程序来演示如何使用跟踪点。 下面是&lt;a id="ctl00_mainContentContainer_ctl06" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl06',this);" href="http://www.hanselman.com/blog/TheWeeklySourceCode13FibonacciEdition.aspx"&gt;&lt;font color="#0066dd"&gt;斐波那契数列&lt;/font&gt;&lt;/a&gt;的递归实现：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.6(zh-cn,MSDN.10).gif" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在上面的应用程序中，针对特定的输入，我们使用Console.WriteLine()来输出最后的斐波那契数列。假如我们想在调试过程中研究斐波那契的递归过程&amp;#8212;&amp;#8212;而不停止调试的执行？ 跟踪点能帮我们很轻松地做到这一点。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;设置跟踪点&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你可以这样启用跟踪点：按F9在代码上设置一个断点， 右击断点，在右键菜单中选择&amp;#8220;命中条件&amp;#8230;&amp;#8221;菜单命令：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.7(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;将弹出以下对话框&amp;#8212;&amp;#8212;允许你指定当断点触发时，进行何种操作：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.8(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如上所示，我们指定每次当断点的条件成立时，打印跟踪信息。注意我们指定了想要输出的局部变量&amp;#8220;X&amp;#8221; 的值作为输出信息的一部分。 局部变量能通过{变量名}的语法被引用。 也有内嵌的命令（像$CALLER，$CALLSTACK， $FUNCTION等等）可以用来输出跟踪信息中常见的值。&lt;/p&gt;&#xD;
&lt;p&gt;上面对话框的底部， 我们也选中了&amp;#8220;继续执行&amp;#8221;单选框&amp;#8212;&amp;#8212;表示我们不希望调试器暂停程序。 相反，程序会继续执行&amp;#8212;&amp;#8212;只是我们自定义的跟踪信息会在每次断点条件满足时输出，就这点不同。&lt;/p&gt;&#xD;
&lt;p&gt;现在当我们运行程序时，我们会发现自定义的跟踪信息会自动出现在VS的输出窗口中&amp;#8212;&amp;#8212;使我们能看到程序的递归过程。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.9(zh-cn,MSDN.10).gif" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你也可以选择为你的程序设置一个自定义跟踪监听器&amp;#8212;&amp;#8212;这样跟踪点的输出信息就会被重定向到它里面，而不是VS的输出窗口里。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;跟踪点&amp;#8212;&amp;#8212;运行自定义的宏&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上周我在伦敦做了一次演讲， 听众中有个人问了这样一个问题：有没有可能当击中一个跟踪点时，自动输出所有的局部变量。&lt;/p&gt;&#xD;
&lt;p&gt;这个功能不是内置在VS中的， 但是可以通过在VS中写一个自定义的宏来启用它，然后设置一个跟踪点，当它被击中时，调用这个宏。 为了实现这个目的， 打开VS中的宏窗口（工具-&amp;gt;宏-&amp;gt;宏菜单命令）。然后在项目管理器&amp;#8220;MyMacros&amp;#8221;结点下面， 选择模板或者新建一个模板（如：添加一个名为&amp;#8220;UsefulThings&amp;#8221;的 模板）， 再将下面的VB宏代码贴到模板里，并保存它：&lt;/p&gt;&#xD;
&lt;p&gt;Sub DumpLocals()&lt;/p&gt;&#xD;
&lt;p&gt;Dim outputWindow As EnvDTE.OutputWindow&lt;/p&gt;&#xD;
&lt;p&gt;outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object&lt;/p&gt;&#xD;
&lt;p&gt;Dim currentStackFrame As EnvDTE.StackFrame&lt;/p&gt;&#xD;
&lt;p&gt;currentStackFrame = DTE.Debugger.CurrentStackFrame&lt;/p&gt;&#xD;
&lt;p&gt;outputWindow.ActivePane.OutputString("*Dumping Local Variables*" + vbCrLf)&lt;/p&gt;&#xD;
&lt;p&gt;For Each exp As EnvDTE.Expression In currentStackFrame.Locals&lt;/p&gt;&#xD;
&lt;p&gt;outputWindow.ActivePane.OutputString(exp.Name + " = " + exp.Value.ToString() + vbCrLf)&lt;/p&gt;&#xD;
&lt;p&gt;Next&lt;/p&gt;&#xD;
&lt;p&gt;End Sub&lt;/p&gt;&#xD;
&lt;p&gt;上面的宏代码依次检测当前堆栈，获取所有的局部变量，并将其显示在输出窗口。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;使用DumpLocals自定义宏&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在下面这个简单的应用程序中，我们可以利用自定义的&amp;#8220;DumpLocals&amp;#8221;宏：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.10(zh-cn,MSDN.10).gif" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在上面的Add方法的return语句上，按F9设置一个断点。 右击断点，选择&amp;#8220;命中条件&amp;#8230;&amp;#8221;菜单命令：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.11(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;将弹出以下对话框，上例中，我们选中了&amp;#8220;打印信息&amp;#8221;的单选框，再手工指定希望输出的变量， 而这里， 我们选中&amp;#8220;运行宏&amp;#8221;的单选框，使它指向我们创建的自定义宏UsefulThings.DumpLocals：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.12(zh-cn,MSDN.10).jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们仍然选中&amp;#8220;继续执行&amp;#8221;单选框，这样能保证当跟踪点被击中时，程序依然能够继续执行。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;运行程序&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在当我们按F5运行程序，当调用Add方法时，我们将看见以下输出出现在VS输出窗口中。 注意当跟踪点被击中时，宏是如何自动列出各个变量名及其值的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img title="" alt="" align="top" src="http://i.msdn.microsoft.com/gg213858.13(zh-cn,MSDN.10).gif" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;总结&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;VS调试器功能非常丰富。 我强烈建议大家抽出一些时间来学习它的所有功能。 以上的技巧和诀窍只是很多大家没有真正意识到的功能中的一小部分。&lt;/p&gt;&#xD;
&lt;p&gt;我之前写过其他一些&lt;a id="ctl00_mainContentContainer_ctl07" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl07',this);" href="http://weblogs.asp.net/scottgu/archive/2010/04/21/vs-2010-debugger-improvements-breakpoints-datatips-import-export.aspx"&gt;&lt;font color="#0066dd"&gt;关于VS2010调试器改进的博客&lt;/font&gt;&lt;/a&gt;（包括数据标签固定，断点导入导出，保留最后值变量， 等等）。 我将发表更多关于VS2010的智能跟踪和转储文件调试支持的博文。这些技术提供了很多非常酷的新功能，会让程序(包括产品中的程序)的调试变得非常简单和强大。&lt;/p&gt;&#xD;
&lt;p&gt;也请务必看看Scott Cate很棒的&lt;a id="ctl00_mainContentContainer_ctl08" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl08',this);" href="http://scottcate.com/Tricks/"&gt;&lt;font color="#0066dd"&gt;VS2010技巧和诀窍系列&lt;/font&gt;&lt;/a&gt;，你可以学习如何更好的利用VS。他有一些非常棒的免费视频和博客。&lt;/p&gt;&#xD;
&lt;p&gt;也要看看Jim Griesmer很棒的&lt;a id="ctl00_mainContentContainer_ctl09" onclick="javascript:Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl09',this);" href="http://blogs.msdn.com/b/jimgries/archive/tags/debuggers%20and%20debugging/"&gt;&lt;font color="#0066dd"&gt;VS调试技巧和诀窍系列&lt;/font&gt;&lt;/a&gt;。 他有许多很好的可以利用的技巧和诀窍。&lt;/p&gt;&#xD;
&lt;p&gt;希望这能对您有所帮助。&lt;/p&gt;&#xD;
&lt;p&gt;Scott&lt;/p&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1846755.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846755.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846720.html</id><title type="text">《C#与.NET3.5高级程序设计(第4版)》笔记10</title><summary type="text">第十章 集合与泛型.NET 平台最基础的容器是 System.Array类型。但是许多时候需要更灵活的数据结构，为了理解构建灵活和安全类型的容器，本章首先介绍了System.Collections命名空间。然而，在 .NET2.0 发布之后，C# 编程语言就增强了支持CTS的新特性泛型。大多数泛型都在System.Collections.Generic命名空间中。泛型容器和它的非泛型版本相比有很多...</summary><published>2010-10-09T08:32:00Z</published><updated>2010-10-09T08:32:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846720.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846720.html"/><content type="html">&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第十章&lt;/span&gt; &lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;集合与泛型&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;.NET&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;平台最基础的容器是&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Array&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型。但是许多时候需要更灵活的数据结构，为了理解构建灵活和安全类型的容器，本章首先介绍了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;命名空间。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;然而，在&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;.NET2.0&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;发布之后，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;C#&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;编程语言就增强了支持&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;CTS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的新特性&lt;strong&gt;泛型&lt;/strong&gt;。大多数泛型都在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections.Generic&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;命名空间中。泛型容器和它的非泛型版本相比有很多优势。最后，研究了如何构建自己的泛型成员、类、结构和接口。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;10.1 System.Collections&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的类型&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;之前用到最多的容器就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Array&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;了，但是有很多限制，最大问题就是不能动态调整大小，因此就需要更灵活的容器，这就需要用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;空间中的类型来实现。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;首先，在这个命名空间中，有许多的接口，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Icomparer&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;IEnumerable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;IEnumerator&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等，实现对容器的各种操作的定义（添加、删除、遍历等），然而，前面一章说过了，接口本身不是很有用，而是在各种类型中实现之后，方可显示他们的作用，而&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的类就实现了这些接口。&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;实际上，这个空间中的各种类就是一个容器，用于承载其他类型，容器本身的意义不大，而主要的意义是对其中的内容进行操作（删除、插入、排序等）。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;&lt;strong&gt;&lt;font size="2"&gt;经常用到的类包括：&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：动态大小的数组。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以随心所欲的调整内容的大小，利用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;AddRange&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;批量填充数组，利用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Insert&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;插入到指定位置，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;ToaArray&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;方法可以返回一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Object&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型的数组。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Hashtable&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：哈希表，是数值键标识的对象集合。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Queue&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：先进先出队列。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;具有&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Dequeue&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Enqueue&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Peek&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;主要方法，完成出队、进队和查看队头元素。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Stack&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：后进先出队列（栈）。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;具有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Pop&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Push&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Peek&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;主要方法，完成出栈、进栈和查看栈顶元素。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;SortedList&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：和字典相似，但是可以通过顺序位置进行访问。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;由于这些都是一些应用类，因此没必要详细介绍，多看看&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;MSDN&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;就熟悉了，只要知道用途，在使用过程中自然都理解了。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;另外，还有一些不常用的类，比如&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;bitarray&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等，还有一些抽象基类，以供构造强类型的容器。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;此外，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;下还存在一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Specialized&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;命名空间，它定义了一组更特定的类型。不再赘述，&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;MSDN&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;即可。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;实际上，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;.Collections.Specialized&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;目前已经算是&lt;strong&gt;遗留类型&lt;/strong&gt;了，这些类型不应该用于在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;.NET2.0&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;或更高版本中开发的新项目中。原因不是这些类型很危险，而是性能问题而缺少类型安全。新项目应该忽略这两个命名空间中的类型，而是用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections.Generic&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;命名空间中相关类型。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;10.2 &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;遗留类型的问题&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;这里不直接进入泛型概念，而是先说说&lt;strong&gt;遗留类型存在的问题&lt;/strong&gt;。&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;(1)&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;装箱、拆箱的问题&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;装箱就是通过把变量保存在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System&lt;/span&gt;&lt;/span&gt;.object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中（一定是保存在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System&lt;/span&gt;&lt;/span&gt;.object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;才是装箱哦，非&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System&lt;/span&gt;&lt;/span&gt;.object&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不是装箱），将值类型显式转换为相应的引用类型（显然引用类型之间的转换不属于此类问题）。如果装箱一个值，则&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;CLR&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;会分配新对象到堆上并且将值类型的值复制到那个实例中，因此，返回给我们得就是新分配对象的引用。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;如：&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;short s=25;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object objshort=s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object objshort=(object)s;也是可以的&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;疑问：系统是在哪里记住一个装箱操作的原来类型的？&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;疑问：装箱后，原来的栈中的数据怎么处理呢？立刻释放还是？&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;/span&gt;相反的操作叫拆箱。拆箱就是把保存在对象引用中的值类型转换回栈上的相应值类型。注意，拆箱首先会&lt;strong&gt;验证&lt;/strong&gt;收到的值类型是不是等价于装箱的类型，如果是就将值复制回本地栈变量上。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;short anothershrot=(short)objshort;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;显然，&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;拆箱必须是强制的，手动的。&lt;/span&gt;&lt;/span&gt; &#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;int anotherint=(int)objshort;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;注：&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这句也是强制转换，但是若由于转换类型不兼容，因此运行时是要抛出异常的。&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;其实装箱和拆箱很有用，这使得我们把所有东西都当成&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型，而&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;CLR&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;回负责内存相关额细节。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例如对于&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;ArryaList&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类，其中有一些方法：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_787058" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_787058" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_787058_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_787058" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_787058" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;virtual&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;add(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;object&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;value) &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//............ &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;virtual&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;object&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;index) &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;get&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;set&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;那么使用时：&lt;/font&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_338415" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_338415" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_338415_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_338415" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_338415" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;ArrayList mylist=&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ArrayList(); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;mylist.add(10); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//显然这里先把10进行了装箱为一个object，然后传入add的，这个装箱过程是自动的 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;mylist.Add(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;datatable());&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//显然，这个不是装箱操作，而是子类转父类的操作哦。 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;i=(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;)mylist[0];&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//要用类型索引器查看mylist的值，因为是返回的object类型，这是就要强制转换为原来的值类型。&lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;疑问：拆箱后，将值复制回原来的变量位置？还是重新分配栈空间？&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;拆箱和装箱造成的主要问题在于：&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;1&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）必须在托管堆上分配一个新的对象&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;2&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）基于栈数据的值必须被转移到那个内存位置&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;3&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）在拆箱时，保存在基于堆的对象中的值必须转移回栈;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;4&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）堆上无用的对象最后会被回收。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这就是性能方面的问题。另外，装箱和拆箱在类型安全方面，也有缺失。要使用语法进行拆箱，需要使用强制转换运算符，但是转换是成功还是失败要到运行时才能知道，如果尝试转换为错误的数据类型，就会抛出异常。这时，就需要将一组值类型保存在不需要装箱的容器中，这就是泛型可以解决的问题之一。 &#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;(2)&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型安全和强类型集合问题&lt;/span&gt;&lt;/span&gt; &#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在某些情况下，我们需要非常灵活的容器来保存所有东西。但是大多数时候希望是类型安全的容器，只可以操作某个类型的数据点。在引入&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;.NET2.0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;泛型之前，程序员通过手动构建强类型集合来实现类型安全。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;比如自定义了一个类&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;person&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，要构建人员的一个容器（集合），可以在另外一个类，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;personcollection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类中定义&lt;/span&gt;&lt;font size="2"&gt;A&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;rrayList&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;成员（用于保存&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;person&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型，但是这个&lt;/span&gt;&lt;font size="2"&gt;A&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;rrayList&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是可以保存任意类型的），并且配置所有成员操作强类型的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;person&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对象而不是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型。这样就不用担心类型安全了，因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;C#&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;编译器会检查任何尝试插入不兼容类型的请求（而不是在运行时）。虽然自定义的集合可以确保类型安全，但是必须每一个希望包含的类型创建一个自定义集合。但这不仅重复劳动，而且难以维护。泛型集合就允许我们推迟到创建时才制定包含的类型。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;另外，尽管&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;.NET&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类库中到处有强类型集合，但是这些自定义容器并没有解决装箱问题。即使只处理某种数据类型，还是要分配某个类型的对象来保存数据等。这时还是需要泛型类型，总结起来，泛型的优势：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;1&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）泛型提供更好的性能，因为他们不会导致装箱或拆箱损失&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;2&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）泛型更类型安全，因为他们只包含我们指定的类型&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;3&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）泛型大幅减少了构建自定义集合类型的需要，因为基类库提供了几个预置的容器。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: times new roman"&gt;10.3 System.Collections.Generic&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;这个命名空间中布满了泛型类型。和非泛型命名空间一样，这里包含了大量的类和接口容器（接口就不再赘述了），这些容器能容纳各种类型。&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;按照约定，泛型类型使用普通名字指定他们的占位符（当然一个泛型可以有无数个占位符），使用字母和字符串都可以，但是还是有通常的规则，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;表示类型，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Tkey&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;表示键，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Tvalue&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;表示值。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;许多泛型集合类（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections.Generic&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中）都在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;System.Collections&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应着一个非泛型副本。比如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;List&amp;lt;T&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对应&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;ArrayList&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在实例化泛型类型时，必须带有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;关键字和需要的构造函数参数。此外，需要指定在泛型类型定义中类型参数的替代类型。例如：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman; font-size: small"&gt;List&amp;lt;int&amp;gt; myint=new List&amp;lt;int&amp;gt;();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这样，这个&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;myint&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将在其&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;List&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中将定义时所有的占位符都替换为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。这样，我们就只能往&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;myint&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中操作&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型了，而相应的内部也无需进行装箱和拆箱操作，因为里面的定义的参数类型均是只针对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的，而不是通用的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;10.4&lt;/span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;泛型的其他应用&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;虽大部分开发人员都使用基类库中已有的泛型类型，但是，我们当然可以构建自己的泛型成员和自定义的泛型类型。&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-bidi-font-family: 宋体" lang="EN-US"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;（1）&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;font size="2"&gt;泛型方法&lt;/font&gt;&lt;/span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;我们可以在普通的类和泛型类型中定义泛型方法： &lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;例如&lt;/font&gt;：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_989693" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_989693" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_989693_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_989693" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_989693" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Swap&amp;lt;T&amp;gt;(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T a , &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T b) &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Console.Write(&amp;#8220;The type of T &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;is&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;{0}&amp;#8221;,&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;typeof&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;(T)); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;T temp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;temp=a; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;a=b; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;b=temp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="highlighter_964899" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_964899" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_964899_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_964899" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_964899" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;注意，泛型方法在方法名称后、参数列表前定义类型参数的（占位符）。前面说过，只要你需要，下面都是合法的：&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;static test&amp;lt;T,K&amp;gt;(ref T a , ref K b){}&lt;br /&gt;static test&amp;lt;hahaha&amp;gt;(ref hahaha a){}&lt;/font&gt; &#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;在调用这个方法时（实例方法和静态方法），当且仅当泛型方法需要参数，而且参数也要有基于类型参数的类型时（且包括所有类型参数时），可以选择省略类型参数，因为编译器会基于参数推断类型参数。 如：&lt;/p&gt;&#xD;
&lt;div id="highlighter_115980" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_115980" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_115980_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_115980" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_115980" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;b1 = 1; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;b2 = 2; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Swap(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;b1,&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;b2);&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//合法，因为可以通过b1和b2来判断T为int型了 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Swap&amp;lt;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;&amp;gt;(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;b1,&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;b2); &lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//合法&lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;但是若定义的泛型方法如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;void&amp;nbsp; &lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Swap&amp;lt;T&amp;gt;(int a){}//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;带参数，但是没有类型参数&lt;/span&gt; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;void&amp;nbsp; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Swap&amp;lt;T&amp;gt;(){}//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;不带参数&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2"&gt;static void Swap&amp;lt;T,P&amp;gt;(ref T a, ref int b)//参数中没有完全包括所有类型参数&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;则调用时必须带上&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;&amp;lt;T&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;最后，实际上，定义的泛型方法的返回类型甚至也可以为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_399093" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_399093" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_399093_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_399093" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_399093" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T test&amp;lt;T&amp;gt;() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Console.WriteLine(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;typeof&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;(T)); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;T TEMP = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;default&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;(T); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;TEMP; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;当然，似乎单独定义这样的方法意义不大。但是语法上是可以的。&lt;br /&gt;最后，对于泛型方法的命名，它是否与现有成员方法冲突，是通过名称和类型参数的，而对于和成员变量，只通过名字来判断，例如，下面这两个显然不能同时定义的：&lt;/p&gt;&#xD;
&lt;div id="highlighter_436421" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_436421" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_436421_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_436421" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_436421" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test1&amp;lt;w&amp;gt;()&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test1&amp;lt;t&amp;gt;()&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//而下面两个则是可以共存不冲突的： &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test1&amp;lt;w&amp;gt;()&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test1&amp;lt;t,w&amp;gt;() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//而下面两个依然冲突： &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test1; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test1&amp;lt;T&amp;gt;() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{}&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-bidi-font-family: 宋体" lang="EN-US"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: times new roman"&gt;&lt;font size="2"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;（2）&lt;/font&gt;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;font size="2"&gt;泛型结构和类&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;泛型结构和泛型类的定义方法是类似的。在他们内部，可以定义泛型方法（上面已经讲到）、泛型构造函数、泛型属性等各种泛型成员，当然也可以有普通成员。&lt;/p&gt;&#xD;
&lt;div id="highlighter_990886" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_990886" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_990886_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_990886" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_990886" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;struct&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;point&amp;lt;T&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Private T xpos;&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//泛型成员变量 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public point(T xval)&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//泛型构造函数 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public T x&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//泛型属性 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;get&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;{&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;xpos;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;resetpoint() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Xpos=&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;default&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;(T);&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//利用default关键字获取占位符T的默认值 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;从上面可以看出，类型参数可以出现在字段数据定义、构造函数参数、属性定义中，只要是任何涉及到类型的，都可以用类型参数，只要有必要。&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;注意上面使用了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;关键字来获取占位符的默认值。其实，这个关键字也可以用于非泛型的时候，比如：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;int a=default(int)&lt;/span&gt;;&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;//&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;虽然没这个必要，但是语法正确。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-bidi-font-family: 宋体" lang="EN-US"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;（3）&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;自定义泛型集合&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;实际上，由于基类库提供了大量的允许我们创建类型安全且高效的容器，一般情况下不需要再构建自定义的集合类型。它的大部分好处就是可以添加有独特名字的方法，而不是使用通用的方法名称而已。&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;但是，自定义的泛型方法也是比较麻烦的，要实现这个集合的目的，还需要实现泛型的接口，比如一个自定义泛型集合，要&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来遍历它，则应该实现&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;IEnumerable&amp;lt;T&amp;gt;,&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;而由于此接口是继承了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;IEnumerable&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;接口，因此，实际上需要在自定义泛型集合中实现两个接口。另外，一般设计的自定义泛型集合都是专门为某种类型比如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型或者兼容类型设计的，如果我们期待着的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;应该是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型，那么在编写方法时就有可能访问了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型的一个成员，显然编译器是无法通过的，因为在用户使用过程中，可能传入非&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型（这是可能的）。&lt;strong style="mso-bidi-font-weight: normal"&gt;当一个类型参数未被关联时，称该泛型类型是未绑定，依据设计，未绑定的类型参数被假定为仅仅是&lt;/strong&gt;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;成员，所以不可能有其他类的特有成员和成员变量。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_984317" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_984317" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_984317_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_984317" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_984317" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Class cartest&amp;lt;T&amp;gt;&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//原本期待只能传入car类型 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public T Testcar; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;car temp=(car)Testcar; &lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//可惜期待只是一厢情愿，编译器不知道，所以这里编译错误！ &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;在这里不再介绍自定义泛型集合的具体实现了。&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-bidi-font-family: 宋体" lang="EN-US"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;（4）&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: small"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;关键字给泛型类型(或泛型方法)加约束条件&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;正如上面所说，开发人员编写自定义泛型集合，一般是为了对类型参数强制约束以构建更类型安全的容器中，通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;关键字，可以控制类型参数的各种特性（从而也就避免了上述的传入非期待的类型）。此时，若传入的类型参数不符合约束条件，将得到编译错误，而不是在运行期间，发生可能的异常抛出。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以规定五个泛型约束：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;struct&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，必须是值类型（并因为所有值类型都是结构体，所以就是约束必须是值类型）&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;class&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，非值类型，也就是引用类型&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;new()&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，必须有一个默认的构造函数，注意在多个约束组合时，这个放在最后面。注意，只有约束了这个条件，类中才能&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型，否则会提示&amp;#8220;变量类型&amp;#8220;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#8221;没有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;new() &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;约束，因此无法创建该类型的实例&amp;#8221;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;nameofbaseclass&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，必须是派生自指定的类（这个类或者子类）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;nameofinterface&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，必须实现指定的接口&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;约束列表应该置于泛型类型的基类和列表之后。同时，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以约束包含多个类型参数的泛型类型参数。实际上，不仅仅泛型类型可以使用&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，泛型方法也可以使用它来约束：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;span style="font-size: small"&gt;例子：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman; font-size: small"&gt;Public class myclass&amp;lt;T,K&amp;gt;:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman; font-size: small"&gt;Mybase,ISomeInterface, where T:car,IEnumerable1, IEnumerable2 ,new()&amp;nbsp; where K:struct&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman; font-size: small"&gt;{}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;意思就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;myclass&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是一个泛型类，它继承了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;Mybase&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类，实现了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;ISomeInterface1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;IEnumerable2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;接口，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;必须是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类或其派生类，而且是必须有默认构造函数。而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;K&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;必须是一个值类型。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;疑问：如何约束只能是&lt;/span&gt;&lt;span style="color: red" lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型呢？&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;注意，既然是加了约束条件，那么类型参数就可以认为是具有约束条件的类型了，在使用时，就可以认为他就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;xx&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型，从而访问xx的特有成员和变量，而不是仅仅的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型了。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_186980" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_186980" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_186980_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_186980" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_186980" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ } &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;cartest&amp;lt;T&amp;gt; where T:car,&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;()&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//只能传入car类型 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T tes=&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T(); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&amp;nbsp; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;gettest() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;car temp = (car)tes;&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//由于已经告诉编译器T只能是car类型，所以这里编译通过！ &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;temp.test();&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//由于temp是car类型的实例，所以可以访问实例方法、属性、变量等特有信息。&amp;nbsp; &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可惜的一点是，虽然我们告诉编译器我们传来的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是什么类型的，它其实并不能完全的理解。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;1&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）比如，即使我们指定&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;确实有默认构造函数，如果不约束必须&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，则还是无法实例化的。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_592951" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_592951" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_592951_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_592951" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_592951" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&amp;nbsp;&amp;nbsp; &lt;code &gt;car () &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ } &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;cartest&amp;lt;T&amp;gt; where T:car&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T tes=&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T(); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;/*是无法通过编译的，提示&amp;#8220;错误 变量类型&amp;#8220;T&amp;#8221;没有 new() 约束，因此无法创建该类型的实例&amp;#8221; */&lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;2&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）另外，即使我们知道&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;有带有参数构造函数，还是不能在用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;实例化时候使用有参构造函数进行初始化。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_660101" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_660101" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_660101_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_660101" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_660101" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&amp;nbsp;&amp;nbsp; &lt;code &gt;car() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ } &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;a ) &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ } &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;cartest&amp;lt;T&amp;gt; where T:car,&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T tes=&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T(4); &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//是无法通过编译的，提示&amp;#8220;错误 "T&amp;#8221;:创建变量类型的实例时无法提供参数&amp;#8221; &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;3&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）还有，虽然约束了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;为某种类型（这里为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;），但是无法直接用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来访问&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;car&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的静态变量信息，例如：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_514920" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_514920" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_514920_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_514920" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_514920" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;car () &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;test2()&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//静态方法哦 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;cartest&amp;lt;T&amp;gt; where T:car &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&amp;nbsp; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;gettest () &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;T.test2();&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;/*试图调用car的test2静态方法，但是编译错误&amp;#8220;错误 &amp;#8220;T&amp;#8221;是一个&amp;#8220;类型形参&amp;#8221;，这在给定的上下文中无效&amp;#8221;*/&lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;疑问：那么如何调用&lt;/span&gt; &lt;span style="color: red" lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的静态方法？&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-size: small"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;4&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）最后一点，创建泛型方法时，如果应用类型参数上的任何&lt;/span&gt;&lt;font size="2"&gt;C&lt;/font&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;&lt;font size="2"&gt;#&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;运算符（加、减、乘、除、&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;==&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等），将会收到编译器错误。编译器不允许向类型参数应用运算符。因为编译器不能保证一个未知的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: times new roman"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;重载了这些运算符而可以使用它们进行运算操作。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div id="highlighter_668824" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_668824" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_668824_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_668824" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_668824" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Class basemath&amp;lt;T&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;T add(T arg1,T arg2) &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Return arg1+arg2; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//提示&amp;#8220;错误 运算符&amp;#8220;+&amp;#8221;无法应用于&amp;#8220;T&amp;#8221;和&amp;#8220;T&amp;#8221;类型的操作数&amp;#8221; &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-bidi-font-family: 宋体" lang="EN-US"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;（5）&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;创建泛型基类&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;泛型类是可以作为基类的，可以定义许多虚方法和抽象方法。但是，泛型类的派生类型必须遵守一些规则： &lt;br /&gt;1）如果一个非泛型类扩展了一个泛型类，派生类必须为基类指定一个类型参数。 &lt;/p&gt;&#xD;
&lt;div id="highlighter_195990" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_195990" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_195990_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_195990" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_195990" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parclass&amp;lt;T&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="highlighter_617754" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_617754" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_617754_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_617754" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_617754" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//不能是T了，而是要指定一个具体类型，而且要符合基类的约束条件哦（where关键字限制的）&amp;nbsp; &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;childclass:parclass&amp;lt;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;&amp;gt;{}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;2）如果泛型基类定义了泛型虚方法或抽象方法，派生类必须使用上面使用的指定类型参数重写泛型方法（意思当然是可能要重写一个虚方法或者必须重写一个抽象方法喽）：&lt;/p&gt;&#xD;
&lt;div id="highlighter_106767" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_106767" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_106767_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_106767" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_106767" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parclass&amp;lt;T&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;virtual&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;print(T data){} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;Public &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;childclass:parclass&amp;lt;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;override&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;print(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;data){}&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//不能是T喽 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;3）如果派生类也是泛型，则它能够（可选的）重用类型占位符。不过要注意派生类型必须遵照基类中的任何约束，也就是泛型类如果派生另一个泛型类，只能是如下两种方式之一：&lt;br /&gt;第一种，子类扩展父类，但是依然使用父类的类型参数，此时，子类的约束必须包括父类约束的前提下，再进行别的约束。&lt;/p&gt;&#xD;
&lt;div id="highlighter_489433" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_489433" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_489433_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_489433" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_489433" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parclass&amp;lt;T&amp;gt; where T: DataTable &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;font color="#008200"&gt;//多加了一个new约束 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;childclass&amp;lt;T&amp;gt; : parclass&amp;lt;T&amp;gt; where T : DataTable, &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;() &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;第二种，如果子类想实现父类，则必须指定一个类型参数给父类，自己还可以有新的类型参数。&lt;/p&gt;&#xD;
&lt;div id="highlighter_307227" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_307227" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_307227_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_307227" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_307227" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parclass&amp;lt;T&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;childclass&amp;lt;TT&amp;gt;:parclass&amp;lt;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;&amp;gt;&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//书中没有说这种形式 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;因此，以下两种都是不对的：&lt;/p&gt;&#xD;
&lt;div id="highlighter_729976" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a style="width: 16px; height: 16px"  title="view source" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#viewSource" highlighterid="highlighter_729976" commandname="viewSource"&gt;view source&lt;/a&gt; &#xD;
&lt;div &gt;&#xD;
&lt;object id="highlighter_729976_clipboard" title="copy to clipboard" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="16" height="16" type="application/x-shockwave-flash"&gt;&#xD;
&lt;param name="_cx" value="423" /&gt;&lt;param name="_cy" value="423" /&gt;&lt;param name="FlashVars" value="" /&gt;&lt;param name="Movie" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="Src" value="http://common.cnblogs.com/flash/clipboard.swf" /&gt;&lt;param name="WMode" value="Transparent" /&gt;&lt;param name="Play" value="0" /&gt;&lt;param name="Loop" value="-1" /&gt;&lt;param name="Quality" value="High" /&gt;&lt;param name="SAlign" value="" /&gt;&lt;param name="Menu" value="0" /&gt;&lt;param name="Base" value="" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;param name="Scale" value="ShowAll" /&gt;&lt;param name="DeviceFont" value="0" /&gt;&lt;param name="EmbedMovie" value="0" /&gt;&lt;param name="BGColor" value="" /&gt;&lt;param name="SWRemote" value="" /&gt;&lt;param name="MovieData" value="" /&gt;&lt;param name="SeamlessTabbing" value="1" /&gt;&lt;param name="Profile" value="0" /&gt;&lt;param name="ProfileAddress" value="" /&gt;&lt;param name="ProfilePort" value="0" /&gt;&lt;param name="AllowNetworking" value="all" /&gt;&lt;param name="AllowFullScreen" value="false" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;a style="width: 16px; height: 16px"  title="print" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#printSource" highlighterid="highlighter_729976" commandname="printSource"&gt;print&lt;/a&gt;&lt;a style="width: 16px; height: 16px"  title="?" href="http://www.cnblogs.com/lerit/archive/2010/10/09/1846325.html#about" highlighterid="highlighter_729976" commandname="about"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parclass&amp;lt;T&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;childclass&amp;lt;T&amp;gt;:parclass&amp;lt;T&amp;gt;&lt;/code&gt;&lt;code &gt;&lt;font color="#008200"&gt;//书中没有说这种形式 &lt;/font&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parclass&amp;lt;T&amp;gt; where T:&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;struct&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;childclass&amp;lt;T&amp;gt; : parclass&amp;lt;T&amp;gt; where T : DataTable&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{} &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;总结一下，一个泛型基类，其他类（泛型或非泛型）要不就是实现它，在定义时就给出基类的类型参数，要不就被泛型类继续传递下去，不具体指定基类类型参数，但是这时候子泛型类必须有和基类相同的类型参数和具有基类约束规则的超集。&amp;lt;BR&amp;gt;正常情况下，构建泛型类层次结构的机会微乎其微，但是，只要遵守规则，机会也是有的。&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-bidi-font-family: 宋体" lang="EN-US"&gt;&lt;span style="mso-list: ignore"&gt;&lt;span style="font-family: times new roman"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;（6）&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;创建泛型接口&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当然可以自由定义自己的泛型接口，带不带约束均可，只要满足接口定义和泛型类定义的约束规则，就没问题。&lt;br /&gt;对于这种泛型接口被实现时，必须指定给接口确定的类型参数了，和泛型基类被实现是一样的。另外，对于泛型接口的传递，应该符合上面泛型类传递泛型基类的规则（书中没有论述，但规则是一致的）。&lt;/p&gt;&#xD;
&lt;div id="MySignature"&gt;&#xD;
&lt;div id="AllanboltSignature"&gt;&#xD;
&lt;div&gt;作者：&lt;a href="http://www.cnblogs.com/lerit/" target="_blank"&gt;&lt;font color="#000080"&gt;lerit&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;出处：&lt;a href="http://www.cnblogs.com/lerit/" target="_blank"&gt;&lt;font color="#000080"&gt;http://www.cnblogs.com/lerit/&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1846720.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/10/09/1846720.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/09/13/1825022.html</id><title type="text">sql分页问题，老话题！！</title><summary type="text">老话题了，主要是看下测试数据，不同数量级的效率是不一样的，具体差别很大滴！！,看许多人都说是row number效率最低，但是本人测试结果有点出入。10万级别的基本没啥差距，百万级别的差距不是太明显，但是not in变慢，千万级别的差距就很明显了，not in明显跟不上了。总体比较而言，还是max(id)效率最高，但是不通用。row number比较通用。PS:上亿的就别玩了，还是分表吧！！方法1...</summary><published>2010-09-13T07:21:00Z</published><updated>2010-09-13T07:21:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/09/13/1825022.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/09/13/1825022.html"/><content type="html">&lt;div&gt;老话题了，主要是看下测试数据，不同数量级的效率是不一样的，具体差别很大滴！！,看许多人都说是row number效率最低，但是本人测试结果有点出入。10万级别的基本没啥差距，百万级别的差距不是太明显，但是not in变慢，千万级别的差距就很明显了，not in明显跟不上了。总体比较而言，还是max(id)效率最高，但是不通用。row number比较通用。&lt;/div&gt;&#xD;
&lt;div&gt;PS:上亿的就别玩了，还是分表吧！！&lt;/div&gt;&#xD;
&lt;div&gt;方法1：&lt;br /&gt;适用于 SQL Server 2000/2005&lt;br /&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;页大小&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;table1&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;IN&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;页大小&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;span style="color: #000000"&gt;页&lt;/span&gt;数&lt;/span&gt;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;) id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;table1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BY&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BY&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;font face="Verdana"&gt;方法2：&lt;br /&gt;适用于 SQL Server 2000/2005&lt;br /&gt;&lt;/font&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;页大小&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;table1&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;ISNULL&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;MAX&lt;/span&gt;&lt;span style="color: #000000"&gt;(id),&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;页大小&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;span style="color: #000000"&gt;页&lt;/span&gt;数&lt;/span&gt;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;) id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;table1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BY&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;A&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BY&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;font face="Verdana"&gt;方法3：&lt;br /&gt;适用于 SQL Server 2005&lt;/font&gt;&lt;br /&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;页大小&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ROW_NUMBER()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;OVER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BY&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;RowNumber,&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;table1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;A&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;RowNumber&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;页大小&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;(页数&lt;/span&gt;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;每页20条记录，取第10000条以后的&lt;/p&gt;&#xD;
&lt;p&gt;表结构：id(int)&amp;nbsp; name(varchar) insertTime(datetime)&lt;/p&gt;&#xD;
&lt;p&gt;测试数据：10万级别的数据&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/111.jpg" width="632" height="37" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;三种方式几乎没有区别。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2百万级别&lt;/p&gt;&#xD;
&lt;p&gt;第一种方法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/222.jpg" width="632" height="39" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第二种方法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/333.jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第三种方法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/444.jpg" width="635" height="36" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3千万级别&lt;/p&gt;&#xD;
&lt;p&gt;第一种：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/555.jpg" width="639" height="40" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第二种：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/666.jpg" width="648" height="34" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第三种：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/777.jpg" width="637" height="39" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1825022.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/09/13/1825022.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/birdwudi/archive/2010/09/02/1816252.html</id><title type="text">sql查询连续三天之内都有记录的人员！！</title><summary type="text">select name from testB a where exists( select * from testB b where b.InsertTime = DATEADD(D,1,a.InsertTime) and a.name=b.name) and exists( select * from testB b where b.InsertTime = DATEADD(D,2,a.Inse...</summary><published>2010-09-02T09:23:00Z</published><updated>2010-09-02T09:23:00Z</updated><author><name>菜鸟吴迪</name><uri>http://www.cnblogs.com/birdwudi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/birdwudi/archive/2010/09/02/1816252.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/birdwudi/archive/2010/09/02/1816252.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdwudi/1.jpg" width="369" height="141" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;select name from &lt;br /&gt;testB a where &lt;br /&gt;exists&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; select * from testB b&lt;br /&gt;&amp;nbsp;&amp;nbsp; where b.InsertTime = DATEADD(D,1,a.InsertTime) and a.name=b.name&lt;br /&gt;) &lt;br /&gt;and &lt;br /&gt;exists&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; select * from testB b&lt;br /&gt;&amp;nbsp;&amp;nbsp; where b.InsertTime = DATEADD(D,2,a.InsertTime) and a.name=b.name&lt;br /&gt;)&lt;br /&gt;group by name&lt;/p&gt;&lt;img src="http://www.cnblogs.com/birdwudi/aggbug/1816252.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/birdwudi/archive/2010/09/02/1816252.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
