<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_秋天的思念</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/37844/rss</id><updated>2011-06-20T02:17:53Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/37844/rss"/><entry><id>http://www.cnblogs.com/meceky/archive/2011/06/20/2085016.html</id><title type="text">SQL语句分页</title><summary type="text">最近做项目不允许用存储过程，所以分页的时候就用了SQL语句。如下:declare@Countintdeclare@Pageintset@Count=10set@Page=2selecttop(@Count)FEBId,FPName,FETName,FEBOrderSerial,FEBState,FEBEventDatefrom(selectFEBId,FETName,FPName,FEBOrderSerial,FEBState,FEBEventDate,ROW_NUMBER()over(orderbyFEBIddesc)asRowNumberfrom(selectFE.FEBId,FP.FP.</summary><published>2011-06-20T02:18:00Z</published><updated>2011-06-20T02:18:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2011/06/20/2085016.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2011/06/20/2085016.html"/><content type="html">&lt;p&gt;最近做项目不允许用存储过程，所以分页的时候就用了SQL语句。&lt;/p&gt;&lt;p&gt;如下:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;declare&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Count&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;declare&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Page&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Count&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;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Page&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;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&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;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Count&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;FEBId,FPName,FETName,FEBOrderSerial,FEBState,FEBEventDate&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;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FEBId,FETName,FPName,FEBOrderSerial,FEBState,FEBEventDate,ROW_NUMBER()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;over&lt;/span&gt;&lt;span style="color: #000000;"&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;FEBId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;desc&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;RowNumber&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;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FE.FEBId,FP.FPName,FET.FETName,FE.FEBOrderSerial,FE.FEBState,FE.FEBEventDate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FI_EventBase&amp;nbsp;FE&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;FI_EventType&amp;nbsp;FET&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FE.FEBEventTypeCode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FET.FETCode&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FI_Project&amp;nbsp;FP&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FE.FEBProjectCode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FP.FPCode&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FE.FEBRowStatus&amp;nbsp;&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: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FP.FPRowStatus&amp;nbsp;&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: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FET.FETRowStatus&amp;nbsp;&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: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Filter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Filter.RowNumber&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Page&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;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #008000;"&gt;@Count&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;Filter.FEBId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;desc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/2085016.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2011/06/20/2085016.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/07/07/1772621.html</id><title type="text">Windows XP下如何配置PHP+MYSQL</title><summary type="text">关键字: windows下安装最新的apache+php+mysql指南  Windows下安装最新的Apache+PHP+MySQL指南  一. 安装环境操作系统是 Windows XP 中文版, Apache, PHP, MySQL 的最新版本分别在其官网下载的:* Apache 2.2.9： * PHP 5.2 * MySQL 5.0  二.在 Windows XP 下安装 Apache 2...</summary><published>2010-07-07T01:27:00Z</published><updated>2010-07-07T01:27:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/07/07/1772621.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/07/07/1772621.html"/><content type="html">关键字: windows下安装最新的apache+php+mysql指南  &lt;p&gt;&lt;strong&gt;Windows下安装最新的Apache+PHP+MySQL指南&lt;/strong&gt;  &lt;p&gt;一. 安装环境&lt;br&gt;操作系统是 Windows XP 中文版, Apache, PHP, MySQL 的最新版本分别在其官网下载的:&lt;br&gt;* Apache 2.2.9： &lt;br&gt;* PHP 5.2 &lt;br&gt;* MySQL 5.0  &lt;p&gt;二.在 Windows XP 下安装 Apache 2.2.9&lt;br&gt;Windows XP 下的安装&lt;br&gt;1. 运行 apache 2.2.9 的安装程序，根据提示一路 Next 即可。在 Server Information 的 Network Domain、Server Name 字段随便填上一个域名即可，如php.com，然后根据提示一路 Next 完成即可。  &lt;p&gt;2. 在安装结束时，会弹出一个 DOS 窗口，然后就消失了，这是系统apache自动启动了。  &lt;p&gt;三. 在 Windows XP 下安装 php 5.2&lt;br&gt;1. 将下载的 php 5 ZIP 包直接解压，我直接将 php 5.2 zip 文件解压到 d:\php 目录下面。安装 php 不建议使用 win32 安装程序(主要是以后安装扩展麻烦）。  &lt;p&gt;2. 在资源管理器中进入 php 的安装目录，将 php.ini-dist 或 php.ini-recommended 复制一份，命名为 php.ini。然后打开 php.ini。  &lt;p&gt;3. 找到:  &lt;p&gt;;extension=php_mysql.dll  &lt;p&gt;将前面的 ; 号去掉， 改成：  &lt;p&gt;extension=php_mysql.dll  &lt;p&gt;4. 找到:  &lt;p&gt;extension_dir = “./”  &lt;p&gt;将其改为你的 php 安装目录下 ext 子目录的绝对路径。例如我的：  &lt;p&gt;extension_dir = “D:/php/ext/” &lt;br&gt;5. 配置 Apache 和 PHP  &lt;p&gt;打开 Apache 安装目录下的 conf 子目录中的 httpd.conf 文件。&lt;br&gt;1. 找到：  &lt;p&gt;DocumentRoot “xxxxxxx”  &lt;p&gt;改成你本机的网站内容的目录。例如我的：  &lt;p&gt;DocumentRoot “E:/web”  &lt;p&gt;改完之后往下稍微拉动一下，找到“# This should be changed to whatever you set DocumentRoot to.”，然后把下面这个地方也改过来  &lt;p&gt;&amp;lt;Directory “E:/web”&amp;gt;  &lt;p&gt;2. 找到 LoadModule，根据你的 php 安装目录，在下面空白处加上这两行：  &lt;p&gt;LoadModule php5_module “D:/PHP/php5apache2_2.dll”&lt;br&gt;PHPIniDir “D:/PHP”  &lt;p&gt;3. 找到:  &lt;p&gt;DirectoryIndex index.html  &lt;p&gt;修改为:  &lt;p&gt;DirectoryIndex index.php index.html  &lt;p&gt;4. 找到:  &lt;p&gt;AddType application/x-gzip .gz .tgz  &lt;p&gt;添加这两行：  &lt;p&gt;AddType application/x-httpd-php .php&lt;br&gt;AddType application/x-httpd-php .html  &lt;p&gt;5. 保存 httpd.conf&lt;br&gt;6. 在你的网站目录中(例如我的是 E:/Web/)，手工建立一个 index.php 的文件，内容:  &lt;p&gt;&amp;lt;?php&lt;br&gt;phpinfo();&lt;br&gt;?&amp;gt;  &lt;p&gt;7. 在 dos 窗口中启动 apache 服务（假设Apache安装在了C:\Program Files\Apache Software Foundation\Apache2.2\）  &lt;p&gt;#如果之前启动了，先将其 stop&lt;br&gt;C:\Program Files\Apache Software Foundation\Apache2.2\bin\&amp;gt; httpd -k stop&lt;br&gt;或者是：net stop apache2.2  &lt;p&gt;#启动 apahce 服务&lt;br&gt;C:\Program Files\Apache Software Foundation\Apache2.2\bin\&amp;gt; httpd -k start&lt;br&gt;或者是：net start apache2.2  &lt;p&gt;8. 打开 http://localhost/index.php，即可看到测试输出结果。  &lt;p&gt;6. Windows XP 下安装 MySQL 5.0&lt;br&gt;四.MySQL 的安装比较简单，它提供了一个 win32 的安装包。下载后根据提示一路安装，也可以在安装类型处选 Custom，指定安装目录，这里直接默认安装在了C盘。  &lt;p&gt;安装完成后，会问你要不要到官网注册，跳过即可。然后会问你是否 Configure the MySQL Server now，选中并继续，然后根据提示，设定 字符集，以及 root 管理员的密码即可。  &lt;p&gt;OK, 现在你可以在 XP 下使用 apache + mysql + php 开发 web 程序了。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/meceky/WindowsLiveWriter/WindowsXPPHPMYSQL_84CC/11.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="11" border="0" alt="11" src="http://images.cnblogs.com/cnblogs_com/meceky/WindowsLiveWriter/WindowsXPPHPMYSQL_84CC/11_thumb.jpg" width="119" height="160"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1772621.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/07/07/1772621.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/07/06/1772033.html</id><title type="text">毕业一年总结</title><summary type="text">毕业一年了,做个总结。 去年3月份的时候找了个公司实习，全公司共8个人。我在公司身兼数职，有时是程序员，有时是网管有时是后勤。 九月份从这个公司离职，去了一个陌生的城市。混了两个月才找到工作，也是一个小公司25个人，6个程序员。有做Delphi的，也有做.NET，更有做Lotus notes的。先说下，我是自学的.NET,进来这个公司开始做测试。公司有个哥们，大学毕业后在北大青鸟培训了一段时间，在...</summary><published>2010-07-06T04:20:00Z</published><updated>2010-07-06T04:20:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/07/06/1772033.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/07/06/1772033.html"/><content type="html">&lt;div style="text-indent: 2em"&gt;毕业一年了,做个总结。&lt;/div&gt;&#xD;
&lt;div style="text-indent: 2em"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 去年3月份的时候找了个公司实习，全公司共8个人。我在公司身兼数职，有时是程序员，有时是网管有时是后勤。 &lt;/div&gt;&lt;br /&gt;&#xD;
&lt;div style="text-indent: 2em"&gt;九月份从这个公司离职，去了一个陌生的城市。混了两个月才找到工作，也是一个小公司25个人，6个程序员。有做Delphi的，也有做.NET，更有做Lotus notes的。先说下，我是自学的.NET,进来这个公司开始做测试。公司有个哥们，大学毕业后在北大青鸟培训了一段时间，在这个公司待了将近四年了。公司都还没有超过3K，我一看还真是悲剧。有一种逃跑的念头，因为进公司的时候没有签合同。后来就开始骑驴找马，11月份开始在网上投简历，本市最大的外包公司打电话面试，结果被淘汰(估计是因为薪水要的太低，所以感觉这人水平也不咋地)。 后来又接到另一个公司的面试通知，特意请假去面试，技术过来，和人事也谈了。本以为终于了一换工作了，结果依然是没有结果。&lt;/div&gt;&#xD;
&lt;div style="text-indent: 2em"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 年后回来，继续投简历，回来一个星期就接到一个面试，又是外包，其实那个时候外包是做什么我也不太了解，因为面试的时候问题回答的不是太好，所以要薪水的时候没敢多要(现在想想挺后悔，这个公司是美资公司)。 进来后开始面对真正的外包，有的时候开始怀念那些做项目的时光。 第一个项目是一个美国客户，开始无休止的改bug,因为整个项目的核心已经写好，我们要做的就是改下UI,bug或者是增加些新的功能。上月末，项目骤然停止，因为客户欠费。&lt;/div&gt;&#xD;
&lt;div style="text-indent: 2em"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在没有项目，空闲中。。开始学习C++. &lt;/div&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1772033.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/07/06/1772033.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/07/01/1769353.html</id><title type="text">关于selectNodes与selectSingleNode的用法的区别</title><summary type="text">今天在网上看到一个关于selectNodes与selectSingleNode的用法的区别。  由于之前没有特别在意，因而今日看见是很是惊异。特复制过来，供大家一起学习！  其中文中提到了最重要的区别是在运用操作后的变化。  selectnodes: selectNodes和ChildNodes获取XML内容数组的差异性  我们在使用XML进行查询或者变更数据的时候，需要注意两个很相近但结果相差很...</summary><published>2010-07-01T09:23:00Z</published><updated>2010-07-01T09:23:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1769353.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1769353.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;今天在网上看到一个关于selectNodes与selectSingleNode的用法的区别。 &lt;/p&gt; &lt;p&gt;由于之前没有特别在意，因而今日看见是很是惊异。特复制过来，供大家一起学习！ &lt;/p&gt; &lt;p&gt;其中文中提到了最重要的区别是在运用操作后的变化。 &lt;/p&gt; &lt;p&gt;selectnodes: selectNodes和ChildNodes获取XML内容数组的差异性 &lt;/p&gt; &lt;p&gt;我们在使用XML进行查询或者变更数据的时候，需要注意两个很相近但结果相差很大的用法，如下：&lt;/p&gt; &lt;p&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; XmlDocument doc = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlDocument();&lt;/p&gt;&lt;!--CRLF--&gt; &lt;p&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; Doc.loadXml(strXml);&lt;/p&gt;&lt;!--CRLF--&gt; &lt;p&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; XmlNodeList xnlListOne = doc.selectNodes(“&lt;span style="color: #008000"&gt;//Nodes/Node”);&lt;/span&gt;&lt;/p&gt;&lt;!--CRLF--&gt; &lt;p&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; XmlNodeList xnlListTwo = doc.selectSingleNode(“&lt;span style="color: #008000"&gt;//Nodes”).ChildNodes;&lt;/span&gt;&lt;/p&gt;&lt;!--CRLF--&gt; &lt;p&gt;乍一看，xnlListOne和xnlListTwo都是获取当前Xml文档中的Node数组，如果我们没有变动该Xml文档，则两者没有任何不同，但是一旦我们在后面的操作中添加或者删除了其中的Node节点的话，情况就不一样了，变动后，当我们使用我们前面获取的xnlListOne和xnlListTwo进行遍历操作的时候，我们会发现，前者不会有任何变动，而后者会根据文档内容的变动而实时更新！&lt;/p&gt; &lt;p&gt;这个特性在前台页面的脚本中也会有所出现，例如div嵌套时，获取其嵌套子div时候，使用ChildNodes来获取也会实时更新，这个特性是因为他们都是通过指针指向操作其内容的，其内部应该伴随这一次遍历操作，而获取的结果数组是一次计算后的结果，已经通过开辟新内存的方式进行存储，故而不会受到影响，当然，我们也可以通过这个特性来做一些特别的功能。 &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/xuhuan/articles/1418701.html"&gt;http://www.cnblogs.com/xuhuan/articles/1418701.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1769353.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/07/01/1769353.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/07/01/1769042.html</id><title type="text">ASP.NET中常用输出JS脚本的类</title><summary type="text">[代码]</summary><published>2010-07-01T05:03:00Z</published><updated>2010-07-01T05:03:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1769042.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1769042.html"/><content type="html">&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 一些常用的Js调用&lt;br /&gt;/// 添加新版说明：由于旧版普遍采用Response.Write(string msg)的方式输出js脚本，这种&lt;br /&gt;/// 方式输出的js脚本会在html元素的&amp;amp;lt;html&amp;amp;gt;&amp;amp;lt;/html&amp;amp;gt;标签之外，破坏了整个xhtml的结构,&lt;br /&gt;/// 而新版本则采用ClientScript.RegisterStartupScript(string msg)的方式输出，不会改变xhtml的结构,&lt;br /&gt;/// 不会影响执行效果。&lt;br /&gt;/// 为了向下兼容，所以新版本采用了重载的方式，新版本中要求一个System.Web.UI.Page类的实例。&lt;br /&gt;/// 创建时间：2006-9-13&lt;br /&gt;/// 创建者：马先光&lt;br /&gt;/// 新版作者：周公&lt;br /&gt;/// 修改日期：2007-4-17&lt;br /&gt;/// 修改版发布网址：http://blog.csdn.net/zhoufoxcn&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public class JScript&lt;br /&gt;{&lt;br /&gt;#region 旧版本&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出JavaScript小窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="js"&amp;gt;窗口信息&amp;lt;/param&amp;gt;&lt;br /&gt;public static void Alert(string message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('" + message + "');&amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出消息框并且转向到新的URL&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="message"&amp;gt;消息内容&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="toURL"&amp;gt;连接地址&amp;lt;/param&amp;gt;&lt;br /&gt;public static void AlertAndRedirect(string message, string toURL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = "&amp;lt;script language=javascript&amp;gt;alert('{0}');window.location.replace('{1}')&amp;lt;/script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(string.Format(js, message, toURL));&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 回到历史页面&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="value"&amp;gt;-1/1&amp;lt;/param&amp;gt;&lt;br /&gt;public static void GoHistory(int value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; history.go({0});&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;&amp;nbsp;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(string.Format(js, value));&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 关闭当前窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static void CloseWindow()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent.opener=null;window.close();&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;&amp;nbsp;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.End();&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 刷新父窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static void RefreshParent(string url)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.opener.location.href='" + url + "';window.close();&amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 刷新打开窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static void RefreshOpener()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; opener.location.reload();&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;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 打开指定大小的新窗体&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="url"&amp;gt;地址&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="width"&amp;gt;宽&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="heigth"&amp;gt;高&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="top"&amp;gt;头位置&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="left"&amp;gt;左位置&amp;lt;/param&amp;gt;&lt;br /&gt;public static void OpenWebFormSize(string url, int width, int heigth, int top, int left)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;window.open('" + url + @"','','height=" + heigth + ",width=" + width + ",top=" + top + ",left=" + left + ",location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,titlebar=no,toolbar=no,directories=no');&amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 转向Url制定的页面&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="url"&amp;gt;连接地址&amp;lt;/param&amp;gt;&lt;br /&gt;public static void JavaScriptLocationHref(string url)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.location.replace('{0}');&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;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js = string.Format(js, url);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 打开指定大小位置的模式对话框&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="webFormUrl"&amp;gt;连接地址&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="width"&amp;gt;宽&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="height"&amp;gt;高&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="top"&amp;gt;距离上位置&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="left"&amp;gt;距离左位置&amp;lt;/param&amp;gt;&lt;br /&gt;public static void ShowModalDialogWindow(string webFormUrl, int width, int height, int top, int left)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string features = "dialogWidth:" + width.ToString() + "px"&lt;br /&gt;+ ";dialogHeight:" + height.ToString() + "px"&lt;br /&gt;+ ";dialogLeft:" + left.ToString() + "px"&lt;br /&gt;+ ";dialogTop:" + top.ToString() + "px"&lt;br /&gt;+ ";center:yes;help=no;resizable:no;status:no;scroll=yes";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowModalDialogWindow(webFormUrl, features);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出模态窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="webFormUrl"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="features"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;public static void ShowModalDialogWindow(string webFormUrl, string features)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;string js = ShowModalDialogJavascript(webFormUrl, features);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Response.Write(js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出模态窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="webFormUrl"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="features"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;public static string ShowModalDialogJavascript(string webFormUrl, string features)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;script language=javascript&amp;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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showModalDialog('" + webFormUrl + "','','" + features + "');&amp;lt;/script&amp;gt;";&lt;br /&gt;return js;&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;#region 新版本&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出JavaScript小窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="js"&amp;gt;窗口信息&amp;lt;/param&amp;gt;&lt;br /&gt;public static void Alert(string message, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('" + message + "');&amp;lt;/Script&amp;gt;";&lt;br /&gt;//HttpContext.Current.Response.Write(js);&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "alert"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "alert", js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出消息框并且转向到新的URL&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="message"&amp;gt;消息内容&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="toURL"&amp;gt;连接地址&amp;lt;/param&amp;gt;&lt;br /&gt;public static void AlertAndRedirect(string message, string toURL, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = "&amp;lt;script language=javascript&amp;gt;alert('{0}');window.location.replace('{1}')&amp;lt;/script&amp;gt;";&lt;br /&gt;//HttpContext.Current.Response.Write(string.Format(js, message, toURL));&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "AlertAndRedirect"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "AlertAndRedirect", string.Format(js, message, toURL));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 回到历史页面&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="value"&amp;gt;-1/1&amp;lt;/param&amp;gt;&lt;br /&gt;public static void GoHistory(int value, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; history.go({0});&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;&amp;nbsp;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;//HttpContext.Current.Response.Write(string.Format(js, value));&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "GoHistory"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "GoHistory", string.Format(js, value));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;// /// &amp;lt;summary&amp;gt;&lt;br /&gt;// /// 关闭当前窗口&lt;br /&gt;// /// &amp;lt;/summary&amp;gt;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void CloseWindow()&lt;br /&gt;//&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; #region&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; string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent.opener=null;window.close();&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;&amp;nbsp;&amp;nbsp; &amp;lt;/Script&amp;gt;";&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; HttpContext.Current.Response.Write(js);&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; HttpContext.Current.Response.End();&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; #endregion&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 刷新父窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static void RefreshParent(string url, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.opener.location.href='" + url + "';window.close();&amp;lt;/Script&amp;gt;";&lt;br /&gt;//HttpContext.Current.Response.Write(js);&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "RefreshParent"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "RefreshParent", js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 刷新打开窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static void RefreshOpener(Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; opener.location.reload();&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;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;//HttpContext.Current.Response.Write(js);&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "RefreshOpener"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "RefreshOpener", js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 打开指定大小的新窗体&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="url"&amp;gt;地址&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="width"&amp;gt;宽&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="heigth"&amp;gt;高&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="top"&amp;gt;头位置&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="left"&amp;gt;左位置&amp;lt;/param&amp;gt;&lt;br /&gt;public static void OpenWebFormSize(string url, int width, int heigth, int top, int left, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;window.open('" + url + @"','','height=" + heigth + ",width=" + width + ",top=" + top + ",left=" + left + ",location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,titlebar=no,toolbar=no,directories=no');&amp;lt;/Script&amp;gt;";&lt;br /&gt;//HttpContext.Current.Response.Write(js);&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "OpenWebFormSize"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "OpenWebFormSize", js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 转向Url制定的页面&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="url"&amp;gt;连接地址&amp;lt;/param&amp;gt;&lt;br /&gt;public static void JavaScriptLocationHref(string url, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string js = @"&amp;lt;Script language='JavaScript'&amp;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.location.replace('{0}');&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;&amp;nbsp; &amp;lt;/Script&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js = string.Format(js, url);&lt;br /&gt;//HttpContext.Current.Response.Write(js);&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "JavaScriptLocationHref"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "JavaScriptLocationHref", js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 打开指定大小位置的模式对话框&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="webFormUrl"&amp;gt;连接地址&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="width"&amp;gt;宽&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="height"&amp;gt;高&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="top"&amp;gt;距离上位置&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="left"&amp;gt;距离左位置&amp;lt;/param&amp;gt;&lt;br /&gt;public static void ShowModalDialogWindow(string webFormUrl, int width, int height, int top, int left, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;#region&lt;br /&gt;string features = "dialogWidth:" + width.ToString() + "px"&lt;br /&gt;+ ";dialogHeight:" + height.ToString() + "px"&lt;br /&gt;+ ";dialogLeft:" + left.ToString() + "px"&lt;br /&gt;+ ";dialogTop:" + top.ToString() + "px"&lt;br /&gt;+ ";center:yes;help=no;resizable:no;status:no;scroll=yes";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowModalDialogWindow(webFormUrl, features, page);&lt;br /&gt;#endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// 弹出模态窗口&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="webFormUrl"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="features"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;public static void ShowModalDialogWindow(string webFormUrl, string features, Page page)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;string js = ShowModalDialogJavascript(webFormUrl, features);&lt;br /&gt;//HttpContext.Current.Response.Write(js);&lt;br /&gt;if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "ShowModalDialogWindow"))&lt;br /&gt;&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; page.ClientScript.RegisterStartupScript(page.GetType(), "ShowModalDialogWindow", js);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;// /// &amp;lt;summary&amp;gt;&lt;br /&gt;// /// 弹出模态窗口&lt;br /&gt;// /// &amp;lt;/summary&amp;gt;&lt;br /&gt;// /// &amp;lt;param name="webFormUrl"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;// /// &amp;lt;param name="features"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;// /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static string ShowModalDialogJavascript(string webFormUrl, string features)&lt;br /&gt;//&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; #region&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; string js = @"&amp;lt;script language=javascript&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; showModalDialog('" + webFormUrl + "','','" + features + "');&amp;lt;/script&amp;gt;";&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; return js;&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; #endregion&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;#endregion &#xD;
&lt;p&gt;&lt;a href="http://blog.csdn.net/zhoufoxcn/archive/2008/04/21/2312440.aspx" target="_blank"&gt;Source&lt;/a&gt;&lt;/p&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1769042.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/07/01/1769042.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/07/01/1768929.html</id><title type="text">对.Net 垃圾回收Finalize 和Dispose的理解</title><summary type="text">我们先来谈谈析构函数。			析构函数是不可继承的。因此，除了自已所声明的析构函数外，一个类不具有其他析构函数。			由于析构函数要求不能带有参数，因此它不能被重载，所以一个类至多只能有一个析构函数。			析构函数是自动调用的，它不能被显式调用。当任何代码都不再可能使用一个实例时，该实例就符合被销毁的条件。此后，它所对应的实例析构函数随时均可能被调用。销毁一个实例时，按照从派生程度最大到派生程度最小...</summary><published>2010-07-01T02:58:00Z</published><updated>2010-07-01T02:58:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1768929.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1768929.html"/><content type="html">&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;strong&gt;我们先来谈谈析构函数。&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;析构函数是不可继承的。因此，除了自已所声明的析构函数外，一个类不具有其他析构函数。&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;由于析构函数要求不能带有参数，因此它不能被重载，所以一个类至多只能有一个析构函数。&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;析构函数是自动调用的，它不能被显式调用。当任何代码都不再可能使用一个实例时，该实例就符合被销毁的条件。此后，它所对应的实例析构函数随时均可能被调用。销毁一个实例时，按照从派生程度最大到派生程度最小的顺序，调用该实例的继承链中的各个析构函数。析构函数可以在任何线程上执行。&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;下列示例的输出&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;using System;&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;class A&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;{&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;~A() {&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;Console.WriteLine("A's destructor");&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;class B: A&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;{&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;~B() {&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;Console.WriteLine("B's destructor");&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;class Test&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;{&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;static void Main() {&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;B b = new B();&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;b = null;&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;GC.Collect();&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;GC.WaitForPendingFinalizers();&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;为&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;B's destructor&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;A's destructor&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;这是由于继承链中的析构函数是按照从派生程度最大到派生程度最小的顺序调用的。&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;析构函数实际上是重写了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体; font-size:12pt"&gt;System.Object&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;span style="font-family:宋体"&gt;中的虚方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;&lt;span style="font-size:12pt"&gt;Finalize&lt;/span&gt;&lt;span style="font-size:8pt"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;C# &lt;/span&gt;&lt;span style="font-family:宋体"&gt;程序中不允许重写此方法或直接调用它（或它的重写）。例如，下列程序&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
				&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;class A&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;{&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;override protected void Finalize() {}   // error&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;public void F() {&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;this.Finalize();                     // error&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;包含两个错误。&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;编译器的行为就像此方法和它的重写根本不存在一样。因此，以下程序：&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;class A&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;{&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;void Finalize() {}                     // permitted&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-family:宋体; font-size:12pt"&gt;}&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;是有效的，所声明的方法隐藏了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体; font-size:12pt"&gt;System.Object&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;span style="font-family:宋体"&gt;的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体; font-size:12pt"&gt;Finalize&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法。&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family:宋体"&gt;好，现在我们开始来谈谈&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize &lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:Verdana"&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Finalize &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; Dispose() &lt;/span&gt;&lt;span style="font-family:宋体"&gt;的相同点&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:Verdana"&gt;&lt;strong&gt;:&lt;/strong&gt;&#xD;
				&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;这三者都是为了释放非托管资源服务的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana"&gt;Finalize &lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; Dispose() &lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的不同点&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:Verdana"&gt;&lt;strong&gt;:&lt;/strong&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;是&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;CLR&lt;/span&gt;&lt;span style="font-family:宋体"&gt;提供的一个机制&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;它保证如果一个类实现了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么当该类对象被垃圾回收时&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;垃圾回收器会调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&lt;/span&gt;&lt;span style="font-family:宋体"&gt;而该类的开发者就必须在&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法中处理&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
				&lt;/span&gt;&lt;span style="font-family:宋体"&gt;非托管资源的释放&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;. &lt;/span&gt;&lt;span style="font-family:宋体"&gt;但是什么时候会调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;由垃圾回收器决定&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;该类对象的使用者&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;客户&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;无法控制&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&lt;/span&gt;&lt;span style="font-family:宋体"&gt;从而无法及时释放掉宝贵的非托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&lt;/span&gt;&lt;span style="font-family:宋体"&gt;由于非托管资源是比较宝贵了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;所以这样会降低性能&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;不是&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;CRL&lt;/span&gt;&lt;span style="font-family:宋体"&gt;提供的一个机制&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;而仅仅是一个设计模式&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;作为一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;IDisposable&lt;/span&gt;&lt;span style="font-family:宋体"&gt;接口的方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;它的目的是让供类对象的使用者&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;客户&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;在使用完类对象后&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;可以及时手动调用非托管资源的释放&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;无需等到该类对象被垃圾回收那个时间点&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&lt;/span&gt;&lt;span style="font-family:宋体"&gt;这样类的开发者就只需把原先写在&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的释放非托管资源的代码&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;移植到&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.  &lt;/span&gt;&lt;span style="font-family:宋体"&gt;而在&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中只要简单的调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; "Dispose(false)"(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;为什么传递&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;false&lt;/span&gt;&lt;span style="font-family:宋体"&gt;后面解释&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;就可以了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;strong&gt;&lt;span style="font-family:宋体"&gt;这个时候我们可能比较疑惑&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;为什么还需要一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;?&lt;/span&gt;&lt;span style="font-family:宋体"&gt;难道只有一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;或者只有一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;不可以吗&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:Verdana"&gt;&lt;strong&gt;?&lt;/strong&gt; &lt;br/&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;答案是&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;:  &lt;br/&gt;        &lt;/span&gt;&lt;span style="font-family:宋体"&gt;只有一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;不可以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;. &lt;/span&gt;&lt;span style="font-family:宋体"&gt;为什么呢&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;?&lt;/span&gt;&lt;span style="font-family:宋体"&gt;因为如果只有一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;而没有&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么在处理实现非托管资源释放的代码中无法判断该方法是客户调用的还是垃圾回收器通过&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.&lt;/span&gt;&lt;span style="font-family:宋体"&gt;无法实现判断如果是客户手动调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么就不希望垃圾回收器再调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize()(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;GC.SupperFinalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;).&lt;/span&gt;&lt;span style="font-family:宋体"&gt;另一个可能的原因&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;(:&lt;/span&gt;&lt;span style="font-family:宋体"&gt;我们知道如果是垃圾回收器通过&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么在释放代码中我们可能还会引用其他一些托管对象&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;而此时这些托管对象可能已经被垃圾回收了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;这样会导致无法预知的执行结果&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;千万不要在&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中引用其他的托管对象&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;). &#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;        &lt;/span&gt;&lt;span style="font-family:宋体"&gt;所以确实需要一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;bool disposing&lt;/span&gt;&lt;span style="font-family:宋体"&gt;参数&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;但是如果只有一个&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么对于客户来说&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;就有一个很滑稽要求&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,Dispose(false)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;已经被&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;使用了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;必须要求客户以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(true)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方式调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;但是谁又能保证客户不会以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(false)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方式调用呢&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;?&lt;/span&gt;&lt;span style="font-family:宋体"&gt;所以这里采用了一中设计模式&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;:&lt;/span&gt;&lt;span style="font-family:宋体"&gt;重载&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;  &lt;/span&gt;&lt;span style="font-family:宋体"&gt;把&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实现为&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; protected, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;而&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实现为&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Public,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么这样就保证了客户只能调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose()(&lt;/span&gt;&lt;span style="font-family:宋体"&gt;内部调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(true)//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;说明是客户的直接调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;客户无法调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing). &#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;strong&gt;范例如下&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&lt;strong&gt;:&lt;/strong&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:green"&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;public class BaseResource: IDisposable &lt;br/&gt;{ &lt;br/&gt;  //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;前面我们说了析构函数实际上是重写了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体; font-size:12pt"&gt;System.Object&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;span style="font-family:宋体"&gt;中的虚方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体; font-size:12pt"&gt;Finalize&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;默认情况下&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;一个类是没有析构函数的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;也就是说&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;对象被垃圾回收时不会被调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;  ~BaseResource()      &lt;br/&gt;   { &lt;br/&gt;      // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;为了保持代码的可读性性和可维护性&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;千万不要在这里写释放非托管资源的代码&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;      // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;必须以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(false)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方式调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;false&lt;/span&gt;&lt;span style="font-family:宋体"&gt;告诉&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;函数是从垃圾回收器在调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;时调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;      Dispose(false); &lt;br/&gt;   } &lt;br/&gt;   &lt;br/&gt;   &lt;br/&gt;   // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;无法被客户直接调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;   // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; disposing &lt;/span&gt;&lt;span style="font-family:宋体"&gt;是&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; true, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么这个方法是被客户直接调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么托管的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和非托管的资源都可以释放&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;   // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; disposing &lt;/span&gt;&lt;span style="font-family:宋体"&gt;是&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; false, &lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么函数是从垃圾回收器在调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;时调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;此时不应当引用其他托管对象所以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;只能释放非托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;   protected virtual void Dispose(bool disposing) &lt;br/&gt;   { &lt;br/&gt;      &lt;br/&gt;         // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么这个方法是被客户直接调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么托管的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和非托管的资源都可以释放&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;         if(disposing) &lt;br/&gt;         { &lt;br/&gt;            // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;释放&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
				&lt;/span&gt;&lt;span style="font-family:宋体"&gt;托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;            OtherManagedObject.Dispose(); &lt;br/&gt;         } &lt;br/&gt;         &lt;br/&gt;         &lt;br/&gt;         //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;释放非托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;         DoUnManagedObjectDispose(); &lt;br/&gt;         &lt;br/&gt;                 &lt;br/&gt;         // &lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么这个方法是被客户直接调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;告诉垃圾回收器从&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalization&lt;/span&gt;&lt;span style="font-family:宋体"&gt;队列中清除自己&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;从而阻止垃圾回收器调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;.         &lt;br/&gt;         if(disposing)  &lt;br/&gt;           GC.SuppressFinalize(this);   &lt;br/&gt;           &lt;br/&gt;   }  &lt;br/&gt;   &lt;br/&gt;   //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;可以被客户直接调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;   public void Dispose() &lt;br/&gt;   { &lt;br/&gt;     //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;必须以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(true)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方式调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;以&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;true&lt;/span&gt;&lt;span style="font-family:宋体"&gt;告诉&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(bool disposing)&lt;/span&gt;&lt;span style="font-family:宋体"&gt;函数是被客户直接调用的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;      Dispose(true);      &lt;br/&gt;   } &lt;br/&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt; &lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;上面的范例达到的目的&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;: &lt;br/&gt;&lt;br/&gt;1/ &lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果客户没有调用&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;未能及时释放托管和非托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么在垃圾回收时&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;还有机会执行&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize(),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;释放非托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;但是造成了非托管资源的未及时释放的空闲浪费&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;2/ &lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果客户调用了&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Dispose(),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;就能及时释放了托管和非托管资源&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;那么该对象被垃圾回收时&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;不回执行&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;Finalize(),&lt;/span&gt;&lt;span style="font-family:宋体"&gt;提高了非托管资源的使用效率并提升了系统性能&lt;/span&gt;&lt;span style="font-family:Verdana"&gt;&#xD;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;源地址: &lt;a href="http://liuzhiwei.cnblogs.com/archive/2006/06/28/437662.html"&gt;http://liuzhiwei.cnblogs.com/archive/2006/06/28/437662.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1768929.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/07/01/1768929.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/07/01/1768846.html</id><title type="text">外包项目总结</title><summary type="text">由于Bussiness上的原因，同美国客户的项目暂时停止。别的不去讨论，现在就整个项目做一下总结。因为做的是欧美的外包，而且我接触这个项目的时间也就四个月，很多东西都没有搞清楚。核心的代码老外都已经写好，我们要做的也就是修修补补，或者添加些其他的功能。1.项目介绍：客户名:**(省略)，这个项目主要是以个在线的文件存储.2.整个项目的逻辑很复杂，我也没有搞清楚，我现在也只能说说里面的技术。3.整个...</summary><published>2010-07-01T01:44:00Z</published><updated>2010-07-01T01:44:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1768846.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/07/01/1768846.html"/><content type="html">&lt;p &gt;&lt;span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:&#xD;
Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:&#xD;
minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;由于&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;Bussiness&lt;/span&gt;&lt;span style="font-size:&#xD;
10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;上的原因，同美国客户的项目暂时停止。别的不去讨论，现在就整个项目做一下总结。&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p &gt;&lt;span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:&#xD;
Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:&#xD;
minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;因为做的是欧美的外包，而且我接触这个项目的时间也就四个月，很多东西都没有搞清楚。核心的代码老外都已经写好，我们要做的也就是修修补补，或者添加些其他的功能。&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p  style="margin-left:18.0pt;mso-add-space:&#xD;
auto;text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;1.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;项目介绍：客户名&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;:**(&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:&#xD;
宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;省略&lt;/span&gt;&lt;span lang="EN-US" style="font-size:&#xD;
10.5pt"&gt;)&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:&#xD;
Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:&#xD;
minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;，这个项目主要是以个在线的文件存储&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p  style="margin-left:18.0pt;mso-add-space:&#xD;
auto;text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;2.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;整个项目的逻辑很复杂，我也没有搞清楚，我现在也只能说说里面的技术。&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p  style="margin-left:18.0pt;mso-add-space:&#xD;
auto;text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;3.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;整个项目分好几个模块，有&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;Pc,mac,&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;手机。我们主要负责&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;PC&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:&#xD;
宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;这一块，用到的技术主要是&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;.NET(C#),Clinet&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;用的是&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;WPF,Server&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;用的是&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;ASP.NET+ASP,&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;数据库有&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;SQL Server 2005&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;PostgreSQL,&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;客户端也用到了小巧的&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;SQLite.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p  style="margin-left:18.0pt;mso-add-space:&#xD;
auto;text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;4.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;项目也是按照我们平常用的三层模式，只是里面用到了&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;OOP,Class,Interface&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;&#xD;
mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:&#xD;
minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;很多，而且项目的文档很少，&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;OOP&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;如果有文档的话可能很好分析，但是一旦没有文档分析起来就很难。而且&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;C#&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;中用到了很多的&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;event&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:&#xD;
宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;和&lt;/span&gt;&lt;span lang="EN-US" style="font-size:&#xD;
10.5pt"&gt;delegate,&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;在某个页面或窗体的加载的时候有个初始化的方法来初始化&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;event.&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;老外写的代码很美观，注释很详细。&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p  style="margin-left:18.0pt;mso-add-space:auto;&#xD;
text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;5.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;整个项目中用到了很多的工具，比如&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;table  border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt;&#xD;
 mso-border-themecolor:text1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
 &lt;tbody&gt;&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border:solid black 1.0pt;&#xD;
  mso-border-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:&#xD;
  minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;&#xD;
  mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;源代码管理&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border:solid black 1.0pt;&#xD;
  mso-border-themecolor:text1;border-left:none;mso-border-left-alt:solid black .5pt;&#xD;
  mso-border-left-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span lang="EN-US"&gt;SVN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
 &lt;/tr&gt;&#xD;
 &lt;tr style="mso-yfti-irow:1"&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border:solid black 1.0pt;&#xD;
  mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solid black .5pt;&#xD;
  mso-border-top-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span lang="EN-US"&gt;Bug&lt;/span&gt;&lt;span style="font-family:宋体;mso-ascii-font-family:Calibri;&#xD;
  mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:&#xD;
  minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;管理&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border-top:none;border-left:&#xD;
  none;border-bottom:solid black 1.0pt;mso-border-bottom-themecolor:text1;&#xD;
  border-right:solid black 1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:&#xD;
  solid black .5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solid black .5pt;&#xD;
  mso-border-left-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span lang="EN-US"&gt;TestTrack&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
 &lt;/tr&gt;&#xD;
 &lt;tr style="mso-yfti-irow:2"&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border:solid black 1.0pt;&#xD;
  mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solid black .5pt;&#xD;
  mso-border-top-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:&#xD;
  minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;&#xD;
  mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;测试&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border-top:none;border-left:&#xD;
  none;border-bottom:solid black 1.0pt;mso-border-bottom-themecolor:text1;&#xD;
  border-right:solid black 1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:&#xD;
  solid black .5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solid black .5pt;&#xD;
  mso-border-left-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span lang="EN-US"&gt;Fitness,Nunit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
 &lt;/tr&gt;&#xD;
 &lt;tr style="mso-yfti-irow:3;mso-yfti-lastrow:yes"&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border:solid black 1.0pt;&#xD;
  mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solid black .5pt;&#xD;
  mso-border-top-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:&#xD;
  minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;&#xD;
  mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;自动化编译&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
  &lt;td width="284" valign="top" style="width:213.05pt;border-top:none;border-left:&#xD;
  none;border-bottom:solid black 1.0pt;mso-border-bottom-themecolor:text1;&#xD;
  border-right:solid black 1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:&#xD;
  solid black .5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solid black .5pt;&#xD;
  mso-border-left-themecolor:text1;mso-border-alt:solid black .5pt;mso-border-themecolor:&#xD;
  text1;padding:0cm 5.4pt 0cm 5.4pt"&gt;&#xD;
  &lt;p  style="margin-bottom:0cm;margin-bottom:.0001pt"&gt;&lt;span lang="EN-US"&gt;CruiseControl&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
  &lt;/td&gt;&#xD;
 &lt;/tr&gt;&#xD;
&lt;/tbody&gt;&lt;/table&gt;&#xD;
&#xD;
&lt;p  style="margin-left:18.0pt;mso-add-space:&#xD;
auto;text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;6.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;由于&lt;/span&gt;&lt;span lang="EN-US" style="font-size:&#xD;
10.5pt"&gt;Clinet&lt;/span&gt;&lt;span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:&#xD;
Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:&#xD;
minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"&gt;用&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;C#&lt;/span&gt;&lt;span style="font-size:10.5pt;&#xD;
font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;&#xD;
mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:&#xD;
Calibri;mso-hansi-theme-font:minor-latin"&gt;来写，速度有点慢。&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p  style="margin-left: 18pt; text-indent: -18pt; "&gt;&lt;!--[if !supportLists]--&gt;&lt;span lang="EN-US" style="font-size:10.5pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:&#xD;
minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;7.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:10.5pt;font-family:宋体;&#xD;
mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:&#xD;
宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;&#xD;
mso-hansi-theme-font:minor-latin"&gt;先想了这些。&lt;/span&gt;&lt;span lang="EN-US" style="font-size:10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1768846.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/07/01/1768846.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/06/30/1768516.html</id><title type="text">C#动态编译代码</title><summary type="text">代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--&amp;gt;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingMicrosoft.CSharp;...</summary><published>2010-06-30T09:47:00Z</published><updated>2010-06-30T09:47:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/06/30/1768516.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/06/30/1768516.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('ba243d2c-5000-4261-b8ba-1155332768ae')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"  id="code_img_opened_ba243d2c-5000-4261-b8ba-1155332768ae" onclick="cnblogs_code_hide('ba243d2c-5000-4261-b8ba-1155332768ae',event)" style="display: none;"&gt;&lt;div id="cnblogs_code_open_ba243d2c-5000-4261-b8ba-1155332768ae" &gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Microsoft.CSharp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.IO;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.CodeDom.Compiler;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CompileFiles&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Program&lt;br /&gt;&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;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Main(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[]&amp;nbsp;args)&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;&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;/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;IDictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&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;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dic&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;Dictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&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;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;&amp;nbsp;&amp;nbsp;dic.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CompilerVersion&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;v3.5&lt;/span&gt;&lt;span style="color: #800000;"&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;&amp;nbsp;&amp;nbsp;CSharpCodeProvider&amp;nbsp;objCSharpCodePrivoder&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;CSharpCodeProvider(dic);&lt;br /&gt;&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;CompilerParameters&amp;nbsp;paras&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;CompilerParameters();&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;paras.GenerateExecutable&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;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;编译成exe还是dll&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;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;paras.ReferencedAssemblies.Add("System.dll");&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&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;paras.GenerateInMemory&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;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&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;/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;paras.OutputAssembly&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: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;C:\\UserInfo.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&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;/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;paras.ReferencedAssemblies.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;System.dll&lt;/span&gt;&lt;span style="color: #800000;"&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;&amp;nbsp;&amp;nbsp;paras.ReferencedAssemblies.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;C:\WINDOWS\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll&lt;/span&gt;&lt;span style="color: #800000;"&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;&amp;nbsp;&amp;nbsp;StreamReader&amp;nbsp;sr&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;StreamReader(&lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;C:\UserInfo.cs&lt;/span&gt;&lt;span style="color: #800000;"&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;&amp;nbsp;&amp;nbsp;String&amp;nbsp;txtStr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sr.ReadToEnd();&lt;br /&gt;&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;CompilerResults&amp;nbsp;result&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;objCSharpCodePrivoder.CompileAssemblyFromSource(paras,&amp;nbsp;txtStr);&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;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(result.Errors.HasErrors)&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;{&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: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ErrorMessage&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: #800000;"&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;&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;(CompilerError&amp;nbsp;err&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;result.Errors)&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;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ErrorMessage&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;err.ErrorText;&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;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;Console.WriteLine(ErrorMessage);&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;}&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;&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;/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;Console.ReadKey();&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;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;-----------------------------------------&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Model&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;UserInfo&lt;br /&gt;&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;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ID&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&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;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;virtual&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;UserID&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&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;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;virtual&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;UserName&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1768516.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/06/30/1768516.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/06/30/1768201.html</id><title type="text">JQuery弹出层控件</title><summary type="text">关于插件： 一个基于jQuery的弹出层。支持拖拽，支持内容为文字，图片，URL等!至于兼容性。http://leotheme.cn/wp-content/uploads/Example/js/tipswindown/</summary><published>2010-06-30T03:08:00Z</published><updated>2010-06-30T03:08:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/06/30/1768201.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/06/30/1768201.html"/><content type="html">&lt;p&gt;&lt;strong&gt;关于插件：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;一个基于jQuery的弹出层。支持拖拽，支持内容为文字，图片，URL等!至于兼容性。&lt;/p&gt;&lt;p&gt;http://leotheme.cn/wp-content/uploads/Example/js/tipswindown/&lt;/p&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1768201.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/06/30/1768201.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/meceky/archive/2010/06/25/1765064.html</id><title type="text">Returning TOP N Records</title><summary type="text">Returning only the first N records in a SQL query differs quite a bit between database platforms. Here's some samples:Microsoft SQL ServerPostgreSQL and MySQLOracleSybaseFirebirdDue to these differenc...</summary><published>2010-06-25T04:47:00Z</published><updated>2010-06-25T04:47:00Z</updated><author><name>秋天的思念</name><uri>http://www.cnblogs.com/meceky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/meceky/archive/2010/06/25/1765064.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/meceky/archive/2010/06/25/1765064.html"/><content type="html">&lt;span style="font-family: Helvetica, Arial, sans-serif; font-size: medium; "&gt;&lt;p&gt;Returning only the first N records in a SQL query differs quite a bit between database platforms. Here's some samples:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Microsoft SQL Server&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;SELECT &lt;strong&gt;TOP 10&lt;/strong&gt; column FROM table &lt;/pre&gt;&lt;p&gt;&lt;strong&gt;PostgreSQL and MySQL&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;SELECT column FROM table &lt;strong&gt;LIMIT 10&lt;/strong&gt; &lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Oracle&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;SELECT column FROM table &lt;strong&gt;WHERE ROWNUM &amp;lt;= 10&lt;/strong&gt; &lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Sybase&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;&lt;strong&gt;SET rowcount 10&lt;/strong&gt; SELECT column FROM table &lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Firebird&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;SELECT &lt;strong&gt;FIRST 10&lt;/strong&gt; column  FROM table &lt;/pre&gt;&lt;p&gt;Due to these differences if you want to keep your code database independent you should use the&amp;nbsp;&lt;code style="color: gray; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; background-color: #fbfbfb; "&gt;maxrows&lt;/code&gt;&amp;nbsp;attribute in the&amp;nbsp;&lt;code style="color: gray; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; background-color: #fbfbfb; "&gt;cfquery&lt;/code&gt;&amp;nbsp;tag in ColdFusion. The tradeoffs to database independance is performance, I would expect maxrows to be slower than specifying the rows in the SQL.&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;&amp;lt;cfquery datasource="#ds#" maxrows="10"&amp;gt; SELECT column FROM table &amp;lt;/cfquery&amp;gt; &lt;/pre&gt;&lt;p&gt;PostgreSQL and MySQL have a cool feature that will let you return an arbitrary range of rows (eg return rows 10-20). This is very handy for displaying pages of records:&lt;/p&gt;&lt;pre style="background-color: #fbfbfb; border-left-width: 2px; border-left-style: solid; border-left-color: silver; width: 522px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font-size: 9pt; font-family: 'Lucida Console', monospace; overflow-x: auto; overflow-y: auto; "&gt;SELECT column FROM table LIMIT 10 OFFSET 20 &lt;/pre&gt;&lt;p&gt;The above query will return rows 20-30&lt;/p&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/meceky/aggbug/1765064.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/meceky/archive/2010/06/25/1765064.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
