﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-大家好，欢迎来到我这里</title><link>http://www.cnblogs.com/zw0736/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 19 Nov 2008 09:24:08 GMT</lastBuildDate><pubDate>Wed, 19 Nov 2008 09:24:08 GMT</pubDate><ttl>60</ttl><item><title>如何封装JS和CSS文件封装为服务器端控件---ASP.NET 2.0 </title><link>http://www.cnblogs.com/zw0736/archive/2007/07/28/834757.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Sat, 28 Jul 2007 08:58:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/07/28/834757.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/834757.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/07/28/834757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/834757.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/834757.html</trackback:ping><description><![CDATA[摘要: 如何封装JS和CSS文件为服务器端控件---ASP.NET 2.0我们以封装一个JS的日期控件为列子，将它和服务器的TextBox结合在一起做成一个服务器控件，以达到直接托上去就可以使用的效果。其实很简单，大家共同学习。先看看效果图：方法：首先：下载一个JS的日期组件，带封装。然后：建一个日期类文件CalendarBox.cs代码如下：usingSystem;usingSystem.Collect&nbsp;&nbsp;<a href='http://www.cnblogs.com/zw0736/archive/2007/07/28/834757.html'>阅读全文</a><img src ="http://www.cnblogs.com/zw0736/aggbug/834757.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43607/" target="_blank">[新闻]后“开放”平台时代</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ASP.NET 2.0 异步页面原理浅析 [1] </title><link>http://www.cnblogs.com/zw0736/archive/2007/07/05/807079.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Thu, 05 Jul 2007 05:49:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/07/05/807079.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/807079.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/07/05/807079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/807079.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/807079.html</trackback:ping><description><![CDATA[摘要: 与ASP.NET1.0相比，ASP.NET2.0的各方面改进可以说是非常巨大的。但就其实现层面来说，最大的增强莫过于提供了对异步页面的支持。通过此机制，编写良好的页面可以将数据库、WebService调用等慢速操作，对网站吞吐能力的影响降到最低，并极大的改善网站的平均页面响应速度。本文将从使用和实现两个层面，简单的剖析这一强大机制的原理，以便读者能够更好的应用这一机制。对一个网页请求的生命周期来说&nbsp;&nbsp;<a href='http://www.cnblogs.com/zw0736/archive/2007/07/05/807079.html'>阅读全文</a><img src ="http://www.cnblogs.com/zw0736/aggbug/807079.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43606/" target="_blank">[新闻]李彦宏首次表态竞价排名问题:有错能改善莫大焉</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ASP.NET 2.0 正式版中无刷新页面的开发 </title><link>http://www.cnblogs.com/zw0736/archive/2007/07/05/807076.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Thu, 05 Jul 2007 05:47:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/07/05/807076.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/807076.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/07/05/807076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/807076.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/807076.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;在已经发布的 <span>ASP.NET2.0</span> <span>中，无刷新页面开发相关部分同</span> <span>beta2</span> <span>有不少改动。而且在越来越多的</span> <span>Ajax</span> <span>开发包被开发出来的情况下，</span> <span>ASP.NET2.0</span> <span>自带的无刷新页面技术没有被很多人了解，甚至不少人认为该功能有些&#8220;鸡肋&#8221;。但如果我们仅仅是在程序中加入很少部分的</span> <span>Ajax</span> <span>特性，</span> <span>Atlas</span> <span>、</span> <span>Ajax.Net</span> <span>等就显得有些&#8220;杀鸡用牛刀&#8221;的感觉了。而且，我认为使用</span> <span>ASP.NET2.0</span> <span>提供的方法进行开发并不很复杂，相反，使用很少的代码就可以做出来很棒的效果！</span>
<p><span><span>&nbsp;&nbsp;&nbsp;</span>下面我来一步一步的带大家开发无刷新的页面！</span> </p>
<p><strong><span><span><font face=宋体>&nbsp;第一步：实现</font> </span></span><span><span>ICallbackEventHandler</span> </span><font face=宋体><span><span>接口</span> </span><span></span></font></strong></p>
<p>&nbsp;&nbsp;&nbsp;<span><a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref13/html/T_System_Web_UI_ICallbackEventHandler.htm"><span>ICallbackEventHandler</span><span><span>接口</span></span></a></span><span>位于</span><span><a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref13/html/N_System_Web_UI.htm"><span>System.Web.UI</span><span><span>命名空间</span></span></a></span><span>下。在</span><span>beta2</span><span>时，</span><span>ICallbackEventHandler</span><span>只包含一个</span><span><a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref13/html/M_System_Web_UI_ICallbackEventHandler_RaiseCallbackEvent_1_16219e3a.htm"><span>RaiseCallbackEvent</span></a></span><span>方法，即处理回调事件，又返回处理结果。在正式版中，它变成了包含</span><span><a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref13/html/M_System_Web_UI_ICallbackEventHandler_GetCallbackResult.htm"><span>GetCallbackResult</span></a></span><span>和</span><span><a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref13/html/M_System_Web_UI_ICallbackEventHandler_RaiseCallbackEvent_1_16219e3a.htm"><span>RaiseCallbackEvent</span></a></span><span>两个成员方法，第一个用来返回回调事件的结果，第二个用来出来回调事件。这个变化主要是为了编写</span><span>Web</span><span>控件而做的改动，具体可以看一下</span><span>GridView</span><span>等控件中的实现代码。</span></p>
<p><span>建立一个</span> <span>Web</span> <span>网站，我们来修改</span> <span>default.aspx.cs</span> <span>文件：<br><br></span></p>
<div><span><span>&nbsp;1</span> <font color=#000000><font size=+0>&nbsp;</font> <span>&nbsp;&nbsp;&nbsp;&nbsp;</span> </font></span><span>public</span> <span>&nbsp;partial&nbsp;</span> <span>class</span> <span>&nbsp;_Default&nbsp;:&nbsp;System.Web.UI.Page,&nbsp;ICallbackEventHandler</span> </div>
<br>
<div><span>&nbsp;1</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>private</span>&nbsp;<span>string</span><span>&nbsp;str;<br></span><span>&nbsp;2</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>public</span>&nbsp;<span>void</span><span>&nbsp;RaiseCallbackEvent(</span><span>string</span><span>&nbsp;eventArgument)<br></span><span>&nbsp;3</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span>&nbsp;4</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>//</span><span>可以根据传递的参数不同，调用不同的处理逻辑</span><span><br></span><span>&nbsp;5</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span>=</span>&nbsp;<span>"</span><span>从服务器端返回的内容：</span><span>"</span>&nbsp;<span>+</span><span>&nbsp;eventArgument;<br></span><span>&nbsp;6</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span>&nbsp;7</span>&nbsp;<span><br></span><span>&nbsp;8</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>public</span>&nbsp;<span>string</span><span>&nbsp;GetCallbackResult()<br></span><span>&nbsp;9</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span>10</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>return</span><span>&nbsp;str;<br></span><span>11</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span>12</span>&nbsp;</div>
<p><strong><font face=宋体><span><span>&nbsp;&nbsp;第二步：注册回调方法</span> </span><span></span></font></strong></p>
<span>&nbsp;&nbsp;&nbsp;我们在</span> <span>default.aspx</span> <span>页面中添加一个</span> <span>TextBox</span> <span>，一个</span> <span>Label</span> <span>和一个</span> <span>Html</span> <span>控件</span> <span>Button</span> <span>，并给</span> <span>Button</span> <span>添加</span> <span>onclick</span> <span>事件：<br>
<div><span>1</span>&nbsp;<span>&lt;</span><span>asp:TextBox&nbsp;</span><span>ID</span><span>="TextBox1"</span><span>&nbsp;runat</span><span>="server"</span><span>&gt;&lt;/</span><span>asp:TextBox</span><span>&gt;</span><span><br></span><span>2</span>&nbsp;<span>&lt;</span><span>input&nbsp;</span><span>id</span><span>="Button1"</span><span>&nbsp;type</span><span>="button"</span><span>&nbsp;value</span><span>="提交到Label1"</span><span>&nbsp;onclick</span><span>="CallServer(TextBox1,&nbsp;Label1)"</span><span>/&gt;&lt;</span><span>br/</span><span>&gt;</span><span><br></span><span>3</span>&nbsp;<span>&lt;</span><span>asp:Label&nbsp;</span><span>ID</span><span>="Label1"</span><span>&nbsp;runat</span><span>="server"</span><span>&nbsp;Text</span><span>="Label1:"</span><span>&gt;&lt;/</span><span>asp:Label</span><span>&gt;</span><span><br></span><span>4</span>&nbsp;</div>
</span><br>
<div><span>&nbsp;1</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&lt;</span><span>script&nbsp;</span><span>type</span><span>="text/javascript"</span><span>&gt;</span><span>&nbsp;<br></span><span>&nbsp;2</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>//</span><span>由button调用</span><span><br></span><span>&nbsp;3</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>function</span><span>&nbsp;CallServer(inputcontrol,&nbsp;context)<br></span><span>&nbsp;4</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br></span><span>&nbsp;5</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.innerHTML&nbsp;</span><span>=</span>&nbsp;<span>"</span><span>Loading<img src="http://www.cnblogs.com/Images/dot.gif"></span><span>"</span><span>;<br></span><span>&nbsp;6</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg&nbsp;</span><span>=</span><span>&nbsp;inputcontrol.value;<br></span><span>&nbsp;7</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>//</span><span>注册回调方法</span><span><br></span><span>&nbsp;8</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&lt;%=</span><span>&nbsp;ClientScript.GetCallbackEventReference(</span><span>this</span><span>,&nbsp;</span><span>"</span><span>arg</span><span>"</span><span>,&nbsp;</span><span>"</span><span>ReceiveServerData</span><span>"</span><span>,&nbsp;</span><span>"</span><span>context</span><span>"</span><span>)</span><span>%&gt;</span><span>;&nbsp;<br></span><span>&nbsp;9</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span>10</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>//</span><span>在回调方法中注册的接收返回结果的函数</span><span><br></span><span>11</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>function</span><span>&nbsp;ReceiveServerData(result,&nbsp;context)&nbsp;<br></span><span>12</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span>13</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.innerHTML&nbsp;</span><span>=</span><span>&nbsp;result;<br></span><span>14</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span>15</span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&lt;/</span><span>script</span><span>&gt;</span><span><br></span><span>16</span>&nbsp;</div>
<br>
<p><span>&nbsp;&nbsp;&nbsp;好了，一个无刷新的页面就开发完了，它可以将你在</span> <span>TextBox</span> <span>中输入的文字，通过服务器代码写回到页面的</span> <span>Label</span> <span>中。是不是很简单？你可以运行一下你的程序看看效果啦！</span> </p>
<p><span>&nbsp;&nbsp;&nbsp;下面我们来分析一下这些代码。</span> </p>
<span>&nbsp;&nbsp;&nbsp;首先，我们看<br>
<div><span>&lt;%</span><span>=</span><span>&nbsp;ClientScript.GetCallbackEventReference(this,&nbsp;</span><span>"</span><span>arg</span><span>"</span><span>,&nbsp;</span><span>"</span><span>ReceiveServerData</span><span>"</span><span>,&nbsp;</span><span>"</span><span>context</span><span>"</span><span>)</span><span>%&gt;</span><span>;</span></div>
<br>
<p><font size=3><span><font face="Times New Roman"><span><font color=#000000>&nbsp;&nbsp;&nbsp;</font></span>ClientScript</font></span><span>是</span><span><font face="Times New Roman">System.Web.UI.Page</font></span><span>对象的一个属性，它是</span><span><font face="Times New Roman">System.Web.UI.ClientScriptManager</font></span><span>对象。用于管理客户端脚本，</span><span><font face="Times New Roman">GetCallbackEventReference</font></span><span>方法用于注册一个服务器端事件的客户端回调。它的第四个参数&#8220;</span><span><font face="Times New Roman">Context</font></span><span>&#8221;非常重要，但在</span><span><font face="Times New Roman">MSDN</font></span><span>中并没有相关的例子和详细的说明。在我上面给的代码中可以看到，调用</span><span><font face="Times New Roman">CallServer</font></span><span>方法时，传递的</span><span><font face="Times New Roman">Context</font></span><span>参数就是</span><span><font face="Times New Roman">Label1</font></span><span>，</span><span>而</span><span><font face="Times New Roman">ReceiveServerData</font></span><span>的第二个参数&#8220;</span><span><font face="Times New Roman">Context</font></span><span>&#8221;就是被传递过来的</span><span><font face="Times New Roman">Label1</font></span><span>。在我的例子中，</span><span><font face="Times New Roman">Context</font></span><span>被我用于设定一个用来显示服务端返回结果的控件。其实，你可以将任意的对象赋值给</span><span><font face="Times New Roman">Context</font></span><span>，它都会被传递给本地端处理回调返回结果的函数，这样，你就可以根据调用前指定的&#8220;上下文&#8221;灵活的操作返回结果了！在我给出的完整例子中，你可以看到一个使用</span><span><font face="Times New Roman">Context</font></span><span>做的无刷新显示</span><span><font face="Times New Roman">GridView</font></span><span>的例子。<br></span></font></p>
<p><font size=3><span><span><font face="Times New Roman"><span><font color=#000000>&nbsp;&nbsp;&nbsp;</font></span></font></span>在这里我要说个题外话，</span><span><font face="Times New Roman">Context</font></span><span>这么重要的参数在</span><span><font face="Times New Roman">MSDN</font></span><span>中不但没有详细的说明，而且</span><span><font face="Times New Roman">VS2005</font></span><span>中文正式版</span><span><font face="Times New Roman">MSDN</font></span><span>中关于回调的例子竟然还是</span><span><font face="Times New Roman">beta2</font></span><span>时的实现！这个版本的</span><span><font face="Times New Roman">MSDN</font></span><span>可以说是我用过的版本中品质最差的。不过现在的</span><span><font face="Times New Roman">MSND</font></span><span>可以用&#8220;相当&#8221;庞大来形容，出错也是在所难免的，希望下个版本的</span><span><font face="Times New Roman">MSND</font></span><span>会好一些。</span></font></p>
<p><font size=3><span><font face="Times New Roman"><span><font face="Times New Roman"><span><font color=#000000>&nbsp;&nbsp;&nbsp;</font></span></font></span>OK</font></span><span>，在</span><span><font face="Times New Roman">ASP.NET 2.0</font></span><span>中开发具有</span><span><font face="Times New Roman">Ajax</font></span><span>特性的东东不难吧！其实就是两步：</span></font></p>
<p><span><span><font face="Times New Roman"><font size=3>1、</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><font size=3><span>在</span><span><font face="Times New Roman">Server</font></span><span>端实现</span><span><a href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref13/html/T_System_Web_UI_ICallbackEventHandler.htm"><font face="Times New Roman"><span>ICallbackEventHandler</span></font><span><span>接口</span></span></a></span><span>，在接口包含的方法中根据传递的参数分别调用不同的处理方法，然后返回结果；</span></font></p>
<p><span><span><font face="Times New Roman"><font size=3>2、</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><font size=3><span>在</span><span><font face="Times New Roman">Client</font></span><span>端注册回调函数（当然你也可以在</span><span><font face="Times New Roman">Server</font></span><span>端注册），然后实现处理回调结果的函数。其中，如果对</span><span><font face="Times New Roman">Context</font></span><span>能干灵活运行，你就可以做出非常好的效果了。</span></font></p>
<p><span><font size=3><span><font face="Times New Roman"><span><font face="Times New Roman"><span><font color=#000000>&nbsp;&nbsp;&nbsp;</font></span></font></span></font></span>在我给出的完整例子中，你们可以看到更完整的处理逻辑和更漂亮的特效，当然，增加的代码还是很少的！</font></span></p>
<p><span><font face="Times New Roman" size=3>&nbsp;</font></span></p>
<p><font size=3><span><span><font size=3><span><font face="Times New Roman"><span><font face="Times New Roman"><span><font color=#000000>&nbsp;&nbsp;&nbsp;</font></span></font></span></font></span></font></span>有将近一年没有写</span><span><font face="Times New Roman">Blog</font></span><span>了，手也比较生了。以前</span><span><font face="Times New Roman">cnblogs</font></span><span>的文章我是基本上天天都看的，现在一两个星期看一次就不错了，还是走马观花的浏览几篇而已。如今每天都是为了生活而奔波，人在江湖，身不由己呀！</span></font></p>
<p><font size=3><span><span><font size=3><span><font face="Times New Roman"><span><font face="Times New Roman"><span><font color=#000000>&nbsp;&nbsp;&nbsp;</font></span></font></span></font></span></font></span>发了半天牢骚，我也预告一下，我会在最近写一些介绍</span><span><font face="Times New Roman">Atlas</font></span><span>的文章。其实</span><span><font face="Times New Roman">Atlas</font></span><span>也有很多人都写过了，不过大都是根据官方文档的模式写的，而最近发布的几版</span><span><font face="Times New Roman">CTP</font></span><span>变化挺大的（实现的功能也比较诱人！），对新特性介绍的文章比较少，所以我就来献丑了，希望对大家使用</span><span><font face="Times New Roman">Atlas</font></span><span>有所帮助。</span></font></span></p>
<img src ="http://www.cnblogs.com/zw0736/aggbug/807076.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43606/" target="_blank">[新闻]李彦宏首次表态竞价排名问题:有错能改善莫大焉</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>C#对DateTime类型的操作总结(轉)</title><link>http://www.cnblogs.com/zw0736/archive/2007/07/04/805786.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Wed, 04 Jul 2007 07:43:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/07/04/805786.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/805786.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/07/04/805786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/805786.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/805786.html</trackback:ping><description><![CDATA[<p align=left><span>一、取某月的最后一天</span><span><br></span><span>法一、使用算出该月多少天，年</span><span>+</span><span>月</span><span>+</span><span>加上多少天即得，举例取今天这个月的最后一天</span><span><br><br>private void GetLastDateForMonth(DateTime DtStart,out DateTime DtEnd)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int Dtyear,DtMonth;</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;DtStart = DateTime.Now;<br>&nbsp;&nbsp;&nbsp;Dtyear&nbsp; = DtStart.Year;<br>&nbsp;&nbsp;&nbsp;DtMonth = DtStart.Month;</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;int MonthCount = DateTime.DaysInMonth(Dtyear,DtMonth);<br>&nbsp;&nbsp;&nbsp;DtEnd = Convert.ToDateTime(Dtyear.ToString()+"-"+DtMonth.ToString()+"-"+MonthCount);</span></p>
<p align=left><span>&nbsp;&nbsp;}<br><br></span><span>法二、取出下月的第一天减去一天便是这个的最后一天</span><span><br><br>private void GetLastDateForMonth(DateTime DtStart,out DateTime DtEnd)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int Dtyear,DtMonth;</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;DtStart = DateTime.Now.AddMonths(1);<br>&nbsp;&nbsp;&nbsp;Dtyear&nbsp; = DtStart.Year;<br>&nbsp;&nbsp;&nbsp;DtMonth = DtStart.Month;<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;DtEnd = Convert.ToDateTime(Dtyear.ToString()+"-"+DtMonth.ToString()+"-"+"1").AddDays(-1);</span></p>
<p align=left><span>&nbsp;&nbsp;}</span></p>
<p align=left>&nbsp;<span>二、时间差的计算</span><span><br></span><span>法一、使用</span><span>TimeSpan&nbsp;</span><span>，同时也介绍一下</span><span>TimeSpan</span><span>的用法</span><span><br>&nbsp;<br></span><span>相关属性和函数</span><span><br><br>Add</span><span>：与另一个</span><span>TimeSpan</span><span>值相加。</span><span> <br>Days:</span><span>返回用天数计算的</span><span>TimeSpan</span><span>值。</span><span> <br>Duration:</span><span>获取</span><span>TimeSpan</span><span>的绝对值。</span><span> <br>Hours:</span><span>返回用小时计算的</span><span>TimeSpan</span><span>值</span><span> <br>Milliseconds:</span><span>返回用毫秒计算的</span><span>TimeSpan</span><span>值。</span><span> <br>Minutes:</span><span>返回用分钟计算的</span><span>TimeSpan</span><span>值。</span><span> <br>Negate:</span><span>返回当前实例的相反数。</span><span> <br>Seconds:</span><span>返回用秒计算的</span><span>TimeSpan</span><span>值。</span><span> <br>Subtract:</span><span>从中减去另一个</span><span>TimeSpan</span><span>值。</span><span> <br>Ticks:</span><span>返回</span><span>TimeSpan</span><span>值的</span><span>tick</span><span>数。</span><span> <br>TotalDays:</span><span>返回</span><span>TimeSpan</span><span>值表示的天数。</span><span> <br>TotalHours:</span><span>返回</span><span>TimeSpan</span><span>值表示的小时数。</span><span> <br>TotalMilliseconds:</span><span>返回</span><span>TimeSpan</span><span>值表示的毫秒数。</span><span> <br>TotalMinutes:</span><span>返回</span><span>TimeSpan</span><span>值表示的分钟数。</span><span> <br>TotalSeconds:</span><span>返回</span><span>TimeSpan</span><span>值表示的秒数。</span><span>&nbsp;<br>&nbsp;<br><br></span><span>简单示例：</span><span><br>DateTime d1 =new DateTime(2004,1,1,15,36,05);<br>DateTime d2 =new DateTime(2004,3,1,20,16,35);<br><br>TimeSpan d3 = d2.Subtract(d1);<br><br>LbTime.Text = "</span><span>相差</span><span>:"<br>+d3.Days.ToString()+"</span><span>天</span><span>"<br>+d3.Hours.ToString()+"</span><span>小时</span><span>"<br>+d3.Minutes.ToString()+"</span><span>分钟</span><span>"<br>+d3.Seconds.ToString()+"</span><span>秒</span><span>";<br><br></span><span>法二、使用</span><span>Sql</span><span>中的</span><span>DATEDIFF</span><span>函数</span><span><br></span><span>使用方法：</span><span>DATEDIFF <strong>( </strong><em>datepart </em><strong>,</strong> <em>startdate </em><strong>,</strong> <em>enddate </em><strong>)<br></strong></span><span>它能帮你取出你想要的各种形式的时间差，如相隔多少天，多少小时，多少分钟等，具体格式如下：</span></p>
<table cellPadding=0 width=571 border=1>
    <tbody>
        <tr>
            <td vAlign=top width="44%">
            <p align=center><strong><span>日期部分</span></strong><strong></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=center><strong><span>缩写</span></strong><strong></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>year</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>yy, yyyy</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>quarter</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>qq, q</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>Month</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>mm, m</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>dayofyear</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>dy, y</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>Day</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>dd, d</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>Week</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>wk, ww</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>Hour</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>hh</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>minute</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>mi, n</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>second</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>ss, s</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="44%">
            <p align=left><strong><span>millisecond</span></strong></p>
            </td>
            <td vAlign=top width="56%">
            <p align=left><strong><span>ms</span></strong></p>
            </td>
        </tr>
    </tbody>
</table>
<span><br><br></span><span>如：</span><span>datediff(mi,DtOpTime,DtEnd)&nbsp; </span><span>便能取出他们之间时间差的分钟总数，已经帮你换算好了，对于要求规定单位，时、分、秒特别有用</span><span><br></span>
<img src ="http://www.cnblogs.com/zw0736/aggbug/805786.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43605/" target="_blank">[新闻]杨致远发表博客解释辞职原因</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>谈谈C#中的接口</title><link>http://www.cnblogs.com/zw0736/archive/2007/06/29/799951.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Fri, 29 Jun 2007 03:35:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/29/799951.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/799951.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/29/799951.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/799951.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/799951.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<h3><font size=5><span>接口的相关陈述<br></span></font></h3>
<p><span>摘抄来自"<a href="http://www.cnblogs.com/sifang2004/archive/2006/07/14/450565.html">http://www.cnblogs.com/sifang2004/archive/2006/07/14/450565.html</a>")１．<br>一个接口定义了一个契约。</span></p>
<p><span>２．接口可以包容方法、<span>C#</span>属性、事件、以及索引器。</span></p>
<p><span>３．在一个接口声明中，我们可以声明零个或者多个成员。</span></p>
<p><span>４．所有接口成员的默认访问类型都是<span>public</span>。</span></p>
<p><span>５．如果在接口成员声明中包括了任何修饰符，那么会产生一个编译器错误。</span></p>
<p><span>６．与一个非抽象类类似，一个抽象类必须提供接口中所有成员的实现，只要这些成员在这个类的基类中出现过。</span></p>
<p><span><span><font face=Verdana>&nbsp;</font></span></span></p>
<h3><font size=5><span>接口的理解</span></font></h3>
<p><span><span><span><font face=Verdana>1.</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></span><span><span>面向接口编程利用</span></span><span><span><font face=Verdana>OO</font></span></span><span><span>的一个基本性质</span></span><span><span><font face=Verdana>——</font></span></span><span><span>多态，相同方法不同表现。可以这样想一下，</span></span><span><span><font face=Verdana>client</font></span></span><span><span>编写自己程序的时候，如果直接面向一个具体类写程序，那这个程序有个风吹草动的，那</span></span><span><span><font face=Verdana>client</font></span></span><span><span>就要受到影响，但如果面向一个接口就不同了，某个具体类变了，只知接口，不知具体类的</span></span><span><span><font face=Verdana>client</font></span></span><span><span>就可以完全不动。</span></span><span><span><font face=Verdana> </font></span></span><span><span>都说上层领导比较好当，因为可以干的事通常对老百姓来说是虚的，越虚就越不容易错。</span></span><span><span><font face=Verdana> </font></span></span><span><br></span><span><span>这个道理在</span></span><span><span><font face=Verdana>OO</font></span></span><span><span>中也是适用的。</span></span><span></span></p>
<p><span><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></span><span><span>换个视角看，面向接口编程反映</span></span><span><span><font face=Verdana>OO</font></span></span><span><span>的另一个方面</span></span><span><span><font face=Verdana>——</font></span></span><span><span>封装，接口将具体实现封装了起来，可以不影响客户的情况下切换实现</span></span><span></span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>接口的作用，一言以蔽之，就是标志类的类别（<span>type&nbsp;of&nbsp;class</span>）。把不同类型的类归于不同的接口，可以更好的管理他们。<span>OO</span>的精髓，我以为，是对对象的抽象，最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言（比如<span>c++</span>、<span>java</span>、<span>c#</span>等），就是因为设计模式所研究的，实际上就是如何合理的去抽象。（<span>cowboy</span>的名言是<span>&#8220;</span>抽象就是抽去像的部分<span>&#8221;</span>，看似调侃，实乃至理）。</span></p>
<p>&nbsp;</p>
<p><a name=1></a><span><span><strong><font face=宋体>空接口的使用</font></strong></span></span><span><br></span><span><span><font face=宋体>在接口使用的时候<span>,</span>空接口有<span>2</span>种情况</font><font face=宋体><span>:<br>1.</span>类似于<span>ObjectBuilder</span>中的</font></span></span><span>IBuilderPolicy</span><font face=宋体><span><span>,</span></span><span><span>他们往往是做一个标记<span>,</span>表示需要某个功能<span>.</span>当然你也可以这么用<span>,</span>来表示你的类具有某个功能<span>,</span>实现了你的某个接口<span>.</span></span></span></font></p>
<p align=left><span>namespace</span><span> Microsoft.Practices.ObjectBuilder</span></p>
<p align=left><span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>///</span><span> </span><span>&lt;summary&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>///</span><span> Represents a builder policy interface. Since there are no fixed requirements</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>///</span><span> for policies, it acts as a marker interface from which to derive all other</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>///</span><span> policy interfaces.</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>///</span><span> </span><span>&lt;/summary&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>public</span> <span>interface</span> <span>IBuilderPolicy</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p align=left><span>}</span><span><strong></strong></span></p>
<p><span><strong><span><font face=宋体 size=2>&nbsp;</font></span></strong></span></p>
<p align=left><font face=宋体><span><span>2.</span></span><span><span>你的接口继承了别的接口<span>(</span>非空<span>),</span>你的接口本身没有声明函数<span>.</span>这种情况一般是你不希望用户使用父接口作为参数类型<span>,</span>因为他们的用途可能不同<span>,</span>此时就可以用空接口来实现<span>.</span></span></span></font><span> </span></p>
<p align=left>&nbsp;</p>
<p align=left><span>interface</span><span> <span>Text</span></span></p>
<p align=left><span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>string</span> getText();</span></p>
<p align=left><span>}</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>interface</span><span> <span>SqlText</span> : <span>Text</span></span></p>
<p align=left><span>{ </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p align=left><span>}</span></p>
<p align=left><span>可以看到<span>,Text</span>接口是用于返回一个字符串<span>.</span>而<span>SqlText</span>是一个</span><font face=宋体><span><span>空接口</span></span><span>,</span></font><span>它继承了<span>Text</span>接口<span>.</span>也就是说<span>SqlText</span>也是一种<span>Text.</span>但是我们可以知道<span>,</span>任何一个字符串不一定是<span>Sql</span>字符串<span>,</span>所以此时声明了一个<span>SqlText</span>接口来用于表名当前的字符串是一个<span>Sql</span>字符串<span>.</span>你的函数可以这样声明<span>: </span></span></p>
<p align=left><span>public</span><span> <span>void</span> doQuery(<span>SqlText</span> sqlText)</span></p>
<p align=left><span>而不是这样：</span></p>
<p align=left><span>public</span><span> <span>void</span> doQuery(<span>Text</span> text)</span></p>
<p align=left><span>避免用户产生歧义的想法<span>,</span>一眼看去<span>,</span>就明白应该传入一个<span>Sql</span>字符串<span>.</span></span></p>
<h3><font size=5><span>接口的成员为什么没有委托</span></font></h3>
<p><font face=宋体><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>我们都知道</span><span>C#</span><span>的接口是可以包含事件的，其实当我们看到事件的时候，很容易就会想到委托，委托是事件的基础，如果对委托和事件不是特别清楚的程序员就一定不会明白，为什么</span><span>C#</span><span>接口中可以包含事件而不能有委托呢。其实简单的说法就是委托也是类型，</span><span>delegate</span><span>关键字引入的是一个新的类型，所以一个</span><span>C#</span><span>接口无法包容一个委托并把它当作成员；而</span><span>event</span><span>关键字引入的是一个新的成员，因此事件可以归人接口。理解这点，我们要从</span><span>C#</span><span>接口的使命说起，</span><span>C#</span><span>接口是一个契约，规范了接口实现者的行为，而不是要有些什么。很简单，例如&#8220;党员&#8221;是个接口，它肯定有个动作是&#8220;为人民服务&#8221;，&#8220;某某党员&#8221;实现了&#8220;党员&#8221;这个接口，那么&#8220;某某党员&#8221;肯定也要&#8220;为人民服务&#8221;，至于你&#8220;某某党员&#8221;是否必须拥用&#8220;电脑&#8221;、&#8220;小孩&#8221;。那么&#8220;党员&#8221;这个接口中肯定不会有规定。这也就是接口的目的，规范了实现者的一些行为。所以</span><span>C#</span><span>接口的成员都是方法，不会有其它了。稍有</span><span>c#</span><span>常识的程序员都明白，</span><span>c#</span><span>中的属性，其实就是两个方法，一个</span><span>Set</span><span>方法，一个</span><span>Get</span><span>方法，同样事件和索引器也都是方法，请看下面的接口：</span></font></p>
<p align=left><span>public</span><span> <span>interface</span> <span>IDrawingObject</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>event</span> <span>EventHandler</span> OnDraw;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>string</span> Name</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>get</span>;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>set</span>;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>int</span> <span>this</span>[<span>int</span> index]</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>get</span>;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>set</span>;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>void</span> SetValue();</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span>该接口包含了</span><font face=宋体><span>c#</span><span>接口所能接纳的所有成员，事件，属性，索引器，方法。把该接口编译后，我们用</span><span>MSIL Disassembler</span><span>工具查看一下：</span></font></p>
<p>&#160;</p>
<p><span><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/sifang2004/200671401.JPG" border=0><br><br>这下大家都明白了，其实属性</span><font face=宋体><span>Name</span><span>对应于</span><span>Get_Name(),Set_Name()</span><span>这两个方法，事件</span><span>OnDraw</span><span>对应于</span><span>add_OnDraw(),remove_OnDraw()</span><span>这两个方法，索引器对应于</span><span>get_Item(),set_Item()</span><span>这两个方法。在看下面的委托和类的定义：</span></font></p>
<p align=left><span>public</span><span> <span>delegate</span> <span>void</span> <span>TestEventDelegate</span>(<span>object</span> sender, System.<span>EventArgs</span> e);</span></p>
<p align=left><span>class</span><span> <span>TestClass</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>public</span> <span>void</span> SetValue()</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{ }</span></p>
<p align=left><span>}</span></p>
<p>&#160;</p>
<p><span><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/sifang2004/200671402.JPG" border=0><br><br>看到了吧，定义一个委托和定义一个类是没有什么区别的，都是定义了个新的类型。所以</span><font face=宋体><span>C#</span><span>接口是不能有委托的，除非微软告诉我们</span><span>C#</span><span>接口中是可以定义类的。</span></font></p>
<img src ="http://www.cnblogs.com/zw0736/aggbug/799951.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43604/" target="_blank">[新闻]微软公布免费安全软件计划</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>如何獲得GridView內LinkButton的RowIndex? (初級) (.NET) (ASP.NET) (轉載)</title><link>http://www.cnblogs.com/zw0736/archive/2007/06/26/796225.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Tue, 26 Jun 2007 05:45:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/26/796225.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/796225.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/26/796225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/796225.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/796225.html</trackback:ping><description><![CDATA[摘要: Abstract 在.NET 1.x的DataGrid，可以在ItemCommand event的e.Item.ItemIndex獲得目前的RowIndex，但在.NET 2.0的GridView，卻無法使用這種方式在RowCommand event獲得RowIndex。Motivation 為什麼需要在RowCommand event獲得RowIndex呢?通常一個Table的PK或FK並不會顯&nbsp;&nbsp;<a href='http://www.cnblogs.com/zw0736/archive/2007/06/26/796225.html'>阅读全文</a><img src ="http://www.cnblogs.com/zw0736/aggbug/796225.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43603/" target="_blank">[新闻]《时代》：杨致远被Google玩弄于股掌之间？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>2007将流行的网语普及</title><link>http://www.cnblogs.com/zw0736/archive/2007/06/15/784552.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Fri, 15 Jun 2007 04:40:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/15/784552.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/784552.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/15/784552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/784552.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/784552.html</trackback:ping><description><![CDATA[<p>2007将流行的网语普及<br>1，鸟大了，什么林子都有 </p>
<p>2，春色满园关不住，我诱红杏出墙来 </p>
<p>3，别人都在假装正经，那我只有假装不正经 </p>
<p>4，流氓不可怕，就怕流氓有文化</p>
<p>5，开车无难事，只怕有新人 </p>
<p>6，客官请自重，小女子只卖身不卖艺</p>
<p>7，你不能让所有人满意，因为不是所有人都是人 </p>
<p>8，男人的谎言可骗女人一夜，女人的谎言可骗男人一生</p>
<p>9，水能载舟，也能煮粥 </p>
<p>10，成功女性，不怕丢人 </p>
<p>11，丫真够奥运的</p>
<p>12，这年头要速度，不然吃屎都赶不上热的 </p>
<p>13，世上有很多路，走的人多了，便没有路 </p>
<p>&nbsp;</p>
<p><span><font size=2>2006将流行的网语普及</font></span></p>
<p><font size=3><span><font face="Times New Roman"></font></span></font>&nbsp;</p>
<p><font size=3><span><font face="Times New Roman">1.</font></span><span>骑白马的不一定是王子，他可能是唐僧。</span></font></p>
<p><font size=3></font><font size=3><span><font face="Times New Roman"><br>2.</font></span><span>带翅膀的不一定是天使，他可能是鸟人。</span></font></p>
<p><font size=3></font><font size=3><span><font face="Times New Roman"><br>3.</font></span><span>站得更高，尿得更远。</span></font><font size=3><span><font face="Times New Roman">&nbsp;</font></span></font></p>
<font size=3><span><font face="Times New Roman">
<p><br>4.</font></span><span>穿别人的鞋，走自己的路，让他们找去吧。</span></p>
<p></font><font size=3><span><font face="Times New Roman"><br>5.</font></span><span>我不是随便的人，我随便起来不是人。</span></font></p>
<font size=3></font><font size=3><span><font face="Times New Roman">
<p><br>6.</font></span><span>女人无所谓正派，正派的是因为受到的引诱不够；男人无所谓忠诚，</span></p>
<p>&nbsp;</p>
<p><span>&nbsp; 忠诚的</span><span>是因为背叛的筹码太低。</span></font></p>
<p><font size=3></font><font size=3><span><font face="Times New Roman"><br>7.</font></span><span>聪明的女人对付男人，而愚蠢的女人是对付女人。</span></font></p>
<p><font size=3></font><font size=3><span><font face="Times New Roman"><br>8.</font></span><span>走自己的路，让别人打车去吧。</span></font></p>
<p><font size=3></font><font size=3><span><font face="Times New Roman"><br>9.</font></span><span>水至清则无鱼，人至贱则无敌。</span></font></p>
<p><font size=3></font><font size=3><span><font face="Times New Roman"><br>10.</font></span><span>男人的最低奋斗目标是：农妇、山泉、有点田。</span></font></p>
<img src ="http://www.cnblogs.com/zw0736/aggbug/784552.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43602/" target="_blank">[新闻]Mozilla即将结束对FireFox 2的支持</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>sql小知識</title><link>http://www.cnblogs.com/zw0736/archive/2007/06/13/782069.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Wed, 13 Jun 2007 07:05:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/13/782069.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/782069.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/13/782069.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/782069.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/782069.html</trackback:ping><description><![CDATA[&nbsp;1、Like语句是否属于SARG取决于所使用的通配符的类型<br>原因是通配符%在字符串的开通使得索引无法使用。<br><br>2、or 会引起全表扫描<br><br>3、非操作符、函数引起的不满足SARG形式的语句<br>不满足SARG形式的语句最典型的情况就是包括非操作符的语句，如：NOT、!=、&lt;&gt;、!&lt;、!&gt;、NOT EXISTS、NOT IN、NOT LIKE等，另外还有函数。下面就是几个不满足SARG形式的例子：<br><br>4、IN 的作用相当与OR<br><br>5、尽量少用NOT<br><br>6、exists 和 in 的执行效率是一样的<br><br>7、用函数charindex()和前面加通配符%的LIKE执行效率一样<br><br>8、union并不绝对比or的执行效率高<br><br>9、字段提取要按照&#8220;需多少、提多少&#8221;的原则，避免&#8220;select *&#8221;<br><br>10、count(*)不比count(字段)慢<br>如果用count(*)和用count(主键)的速度是相当的，而count(*)却比其他任何除主键以外的字段汇总速度要快，而且字段越长，汇总的速度就越慢。我想，如果用count(*)， SQL SERVER可能会自动查找最小字段来汇总的。当然，如果您直接写count(主键)将会来的更直接些。<br><br>11、order by按聚集索引列排序效率最高<br>不排序的速度以及逻辑读次数都是和&#8220;order by 聚集索引列&#8221; 的速度是相当的，但这些都比&#8220;order by 非聚集索引列&#8221;的查询速度是快得多的。同时，按照某个字段进行排序的时候，无论是正序还是倒序，速度是基本相当的。<br><br>12、高效的TOP&nbsp; 
<img src ="http://www.cnblogs.com/zw0736/aggbug/782069.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43601/" target="_blank">[新闻]IBM"走鹃"险胜"Cray Jaguar" 连任世界最快超级计算机</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>沒想到從.net 轉到了 vb</title><link>http://www.cnblogs.com/zw0736/archive/2007/06/12/780336.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Tue, 12 Jun 2007 04:45:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/12/780336.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/780336.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/12/780336.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/780336.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/780336.html</trackback:ping><description><![CDATA[一直都是用vs.net 寫代碼，突然來了個轉變，用vb6.0去寫了,不光是工具的轉變，還從webform 的開發 轉到了 winform 的開發。哈哈，真夠刺激，一直都在追求編程的高境界，以前曾聽高人說，工具就象是一把手中的劍，思想才是無形的劍，所以自己不顧一切來了個挑戰。我想這些思想都是為以後做准備。加油啦。
<img src ="http://www.cnblogs.com/zw0736/aggbug/780336.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43600/" target="_blank">[新闻]微软正式发布Exchange/SharePoint Online</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>VB基本语法</title><link>http://www.cnblogs.com/zw0736/archive/2007/06/04/769841.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Mon, 04 Jun 2007 00:19:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/04/769841.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/769841.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/04/769841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/769841.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/769841.html</trackback:ping><description><![CDATA[<font size=2><font face=Georgia><strong>培训目标：</strong> <br><br>&nbsp;&nbsp;&nbsp;掌握各种基本数据类型以及流程控制语句的语法，感受VB编程。<br><br><br><strong>培训内容：</strong><br><br>&nbsp;&nbsp;&nbsp;1.&nbsp;VB中的数据类型；<br>&nbsp;&nbsp;&nbsp;2. VB中的常量与变量；<br>&nbsp;&nbsp;&nbsp;3. VB中的运算符；<br>&nbsp;&nbsp;&nbsp;4. VB中的流程控制语句。<br><br><br><strong>课后练习：</strong><br><br>&nbsp;&nbsp;&nbsp;改进第一次培训布置的&#8220;计算器&#8221;，要求实现四则运算，并充分利用流程控制语句来实现语句的改进及对数据长度、数据类型以及除零等异常的防范。<br><br>&nbsp;&nbsp;&nbsp;<strong>1、VB中的数据类型</strong><br></font></font>
<ul><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>基本数据类型</em><br><br></font>
    <li><font face=Georgia size=2>比较特别的有对象类型和变体类型。Object 对象类型可以简单的理解成为对控件对象的引用；Variant 变体类型可以算是VB中的特殊类型，由于它的存在常常让人对VB的数据类型检查产生误解。VB在变量声明时，如果不指定变量类型则VB就将为该变量指定为 Variant 类型。 </font>
    <li><font face=Georgia size=2>在最常用的数据类型中，特别要注意的就是 Integer 整型，之所以要特点注意就是因为它的值域很小，在使用中可能会产生数值溢出，通常的做法是在VB中直接使用 Long 来替换全部的 Integer 。 </font>
    <li><font face=Georgia size=2>表中可以看到有个&#8220;类型符&#8221;列，它是声明变量类型的简化形式。 <br></font><font size=2><font face=Georgia><em>&nbsp;&nbsp;&nbsp;自定义数据类型 / </em><em>枚举类型</em> <br><br>PPT中只简述了类型的声明语法，实际上这两种类型的用处极大，通过对它们的使用可以让你的程序更加具有有读性和面向对象的特点，呵呵。来看看俺的示例代码，从中应该可以有点感觉(在VB6中书写枚举类型的变量时可是会有弹出提示的哟<img height=19 src="http://www.blogjava.net/Emoticons/emsmiled.gif" width=19 border=0>)。<br></font></font>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font face=Georgia size=2><img id=Code_Closed_Image_094026 onclick="this.style.display='none'; Code_Closed_Text_094026.style.display='none'; Code_Open_Image_094026.style.display='inline'; Code_Open_Text_094026.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top> <img id=Code_Open_Image_094026 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_094026.style.display='none'; Code_Closed_Image_094026.style.display='inline'; Code_Closed_Text_094026.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top> <span id=Code_Closed_Text_094026 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">自定义类型和枚举类型的使用</span> </font><span id=Code_Open_Text_094026 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><font size=2><font face=Georgia><span style="COLOR: #0000ff">Option</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Explicit</span> </font></font><span style="COLOR: #000000"><br></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这里使用了一个自定义类型来表现登录中的关键信息</span> </font></font><span style="COLOR: #008000"><br><font face=Georgia size=2>' </font></span><span style="COLOR: #008000"><font face=Georgia size=2>通过这里的使用将登录中相互关联的3个属性绑在一起 </font></span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>Private </font></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Type&nbsp;typLogInfo<br>&nbsp;&nbsp;&nbsp;&nbsp;UserName&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">String</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录用户名</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Pwd&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">String</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录密码</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LogState&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;enuLogState&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录结果</span> </font></font><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End </font></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Type<br></span><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这里的枚举类型表现了登录的结果,从下面可以看到对于代码的可读性可以有很大的改善</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Enum</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;enuLogState<br>&nbsp;&nbsp;&nbsp;&nbsp;Success&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录成功</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Faile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录失败</span> </font></font><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Enum </font></span><span style="COLOR: #000000"><br><br></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这是登录窗体上的"登录"按钮的Click事件</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;cmdOK_Click()<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <strong><span style="COLOR: #0000ff">Dim</span> <span style="COLOR: #000000">&nbsp;LoginInfo&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;typLogInfo&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">声明变量</span> </strong></font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">存入登录的用户名以及密码以便下面的检查时使用</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LoginInfo.UserName&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Trim</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">(txtUserName.Text)<br>&nbsp;&nbsp;&nbsp;&nbsp;LoginInfo.Pwd&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Trim</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">(txtPassword.Text)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">检查登录的名称及密码是否正确</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Call</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;loginCheck(LoginInfo)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">根据检查的结果来分支逻辑</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <strong><span style="COLOR: #0000ff">If</span> <span style="COLOR: #000000">&nbsp;LoginInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;Success&nbsp;</span> <span style="COLOR: #0000ff">Then</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这里可以看到枚举对于改善代码的可读性提供了极大帮助</span> </strong></font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">欢迎您:</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">&amp;</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;LoginInfo.UserName<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Else</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">登录失败</span> <span style="COLOR: #000000">"</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">If</span> </font></font><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub </font></span><span style="COLOR: #000000"><br><br></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这是一个自定义的过程,利用它来做登录检查</span> </font></font><span style="COLOR: #008000"><br><font face=Georgia size=2>' </font></span><span style="COLOR: #008000"><font face=Georgia size=2>过程具有一个typLogInfo类型的参数,外部将登录的信息传进来 </font></span><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> <span style="COLOR: #000000">&nbsp;loginCheck(logInfo&nbsp;</span> <span style="COLOR: #0000ff">As</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;typLogInfo)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">检查登录的名称及密码是否正确</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">If</span> <span style="COLOR: #000000">&nbsp;txtUserName&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">ddm</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">And</span> <span style="COLOR: #000000">&nbsp;txtPassword&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">123</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Then</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">通过了登录检查</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Success<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Else</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录失败</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Faile<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">If</span> </font></font><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub </font></span></span></div>
    <font face=Georgia size=2>如果你是一位VB的新手(写过几段小程序)，看过上面的代码后就应该能够体会到这两种类型的优势所在。<em>不过就培训后的效果来看，这段代码对于真正的初学者是一点效果也没有</em>，哎...。 </font></li>
</ul>
<font face=Georgia size=2>&nbsp;&nbsp;&nbsp;<strong>2、VB中的常量与变量</strong><br></font>
<ul>
    <li><font face=Georgia size=2>常量，在VB中最为常见的就是VB常量；常量的最大用处就是助记(VB支持中文，但是中文编程也不能滥用，因此在常量中使用是比较好的选择)<br></font>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font size=2><font face=Georgia><span style="COLOR: #0000ff">Public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Const</span> <span style="COLOR: #000000">&nbsp;单位资料表&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">String</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">DAD6CPP</span> <span style="COLOR: #000000">"</span> </font></font></div>
    <li><font face=Georgia size=2>变量，变量的声明需要注意。因为VB支持<strong>隐式声明(就是不声明)和声明时省略数据类型，这两种情况下变量并不是没有类型，而是 Variant 类型</strong>。<br></font>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font size=2><font face=Georgia><span style="COLOR: #0000ff">Public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;doSomthing()<br>&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">1</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="COLOR: #0000ff"><font face=Georgia size=2>Dim</font> </span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;y<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Dim</span> <span style="COLOR: #000000">&nbsp;i1,&nbsp;i2,&nbsp;i3&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Long</span> </font></font><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub</font> </span></div>
    <br><font face=Georgia size=2>这是三个例子，其中的变量 X 和 Y 都是 Variant 类型，这个比较看出，注意的是第3行声明，这是极易出错的地方，<strong>只有 i3 是Long，i1、i2 都是 Variant</strong>。</font> </li>
</ul>
<font size=2><font face=Georgia>&nbsp;&nbsp;&nbsp;<strong>3、VB中的运算符</strong></font> </font>
<ul>
    <li><font face=Georgia size=2>连接运算符多用 &amp; 就好，+ 对两边操作数会有类型要求</font>
    <li><font face=Georgia size=2>全部的运算符没什么可好说的，按规矩来即可，只是要注意一点在使用运算符时多用括号比依赖记忆的效果要好<img height=19 src="http://www.blogjava.net/Emoticons/regular_smile.gif" width=19 border=0>。</font> </li>
</ul>
<font size=2><font face=Georgia>&nbsp;&nbsp;&nbsp;<strong>4、VB中的流程控制语句</strong></font> </font>
<ul>
    <li><font face=Georgia size=2>条件语句 IF ... Then&nbsp; ...&nbsp; Else ... EndIF，如果是单条语句用 IIF函数 来替换也是不错的，在使用IF语句时必须注意将 Else 写全，这对于日后的调试有很大的益处(当你找半天都没能发现错误所在时就知道了)。</font>
    <li><font face=Georgia size=2>分支语句 Select Case ... Case ... Case Else ... End Select，Case表达式所支持的语法非常的灵活性，这样使得分支语句可使用的范围非常的广，它在特定情况下可有效改善 多IF条件 代码可读性下降的问题。下面来看看对上面示例的改善过程：<br></font>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font size=2><font face=Georgia><img id=Code_Closed_Image_105058 onclick="this.style.display='none'; Code_Closed_Text_105058.style.display='none'; Code_Open_Image_105058.style.display='inline'; Code_Open_Text_105058.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top> <img id=Code_Open_Image_105058 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_105058.style.display='none'; Code_Closed_Image_105058.style.display='inline'; Code_Closed_Text_105058.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top> <span id=Code_Closed_Text_105058 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">使用多条IF</span> </font></font><span id=Code_Open_Text_105058 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><font size=2><font face=Georgia><span style="COLOR: #0000ff">Option</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Explicit</span> </font></font><span style="COLOR: #000000"><br></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这里使用了一个自定义类型来表现登录中的关键信息</span> </font></font><span style="COLOR: #008000"><br><font face=Georgia size=2>'</font> </span><span style="COLOR: #008000"><font face=Georgia size=2>通过这里的使用将登录中相互关联的3个属性绑在一起</font> </span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>Private</font> </span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Type&nbsp;typLogInfo<br>&nbsp;&nbsp;&nbsp;&nbsp;UserName&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">String</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录用户名</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Pwd&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">String</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录密码</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LogState&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;enuLogState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录结果</span> </font></font><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End</font> </span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Type<br></span><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这里的枚举类型表现了登录的结果,从下面可以看到对于代码的可读性可以有很大的改善</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Enum</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;enuLogState<br>&nbsp;&nbsp;&nbsp;&nbsp;Success&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录成功</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PwdFaile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">密码错误</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Faile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">登录失败</span> </font></font><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Enum</font> </span><span style="COLOR: #000000"><br><br></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这是登录窗体上的"登录"按钮的Click事件</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;cmdOK_Click()<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Dim</span> <span style="COLOR: #000000">&nbsp;LoginInfo&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;typLogInfo&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">声明变量</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">存入登录的用户名以及密码以便下面的检查时使用</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LoginInfo.UserName&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Trim</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">(txtUserName.Text)<br>&nbsp;&nbsp;&nbsp;&nbsp;LoginInfo.Pwd&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Trim</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">(txtPassword.Text)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">检查登录的名称及密码是否正确</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Call</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;loginCheck(LoginInfo)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">根据检查的结果来分支逻辑,<strong>这里示例的是IF嵌套</strong></span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">If</span> <span style="COLOR: #000000">&nbsp;LoginInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;Success&nbsp;</span> <span style="COLOR: #0000ff">Then</span> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这里可以看到枚举对于改善代码的可读性提供了极大帮助</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">欢迎您:</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">&amp;</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;LoginInfo.UserName<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Else</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">If</span> <span style="COLOR: #000000">&nbsp;LoginInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;PwdFaile&nbsp;</span> <span style="COLOR: #0000ff">Then</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">密码错误</span> <span style="COLOR: #000000">"</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="COLOR: #0000ff"><font face=Georgia size=2>Else</font> </span><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">用户不存在</span> <span style="COLOR: #000000">"</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">If</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">If</span> </font></font><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub</font> </span><span style="COLOR: #000000"><br><br></span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这是一个自定义的过程,利用它来做登录检查</span> </font></font><span style="COLOR: #008000"><br><font face=Georgia size=2>'</font> </span><span style="COLOR: #008000"><font face=Georgia size=2>过程具有一个typLogInfo类型的参数,外部将登录的信息传进来</font> </span><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> <span style="COLOR: #000000">&nbsp;loginCheck(logInfo&nbsp;</span> <span style="COLOR: #0000ff">As</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;typLogInfo)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">检查登录的名称及密码是否正确,<strong>这里示例了使用ElseIf语句</strong></span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">If</span> <span style="COLOR: #000000">&nbsp;txtUserName&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">ddm</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">And</span> <span style="COLOR: #000000">&nbsp;txtPassword&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">123</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Then</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">通过了登录检查</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Success<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">ElseIf</span> <span style="COLOR: #000000">&nbsp;txtUserName&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">ddm</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Then</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">用户名正确,密码错误</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;PwdFaile<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Else</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">用户名错误</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logInfo.LogState&nbsp;</span> <span style="COLOR: #000000">=</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Faile<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">If</span> </font></font><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub</font> </span></span></div>
    <br><font face=Georgia size=2>这里的登录状态只使用了3种状态，可以看到 cmdOK_Click 事件中对状态的检查使用的是多条IF，如果状态更多的话那么这里的代码会显得更加的繁琐，看看CASE能够给我们带来什么。<br></font>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font size=2><font face=Georgia><img id=Code_Closed_Image_105948 onclick="this.style.display='none'; Code_Closed_Text_105948.style.display='none'; Code_Open_Image_105948.style.display='inline'; Code_Open_Text_105948.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top> <img id=Code_Open_Image_105948 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_105948.style.display='none'; Code_Closed_Image_105948.style.display='inline'; Code_Closed_Text_105948.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top> <span id=Code_Closed_Text_105948 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">使用CASE分支来替换IF</span> </font></font><span id=Code_Open_Text_105948 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">这是登录窗体上的"登录"按钮的Click事件</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;cmdOK_Click()<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Dim</span> <span style="COLOR: #000000">&nbsp;LoginInfo&nbsp;</span> <span style="COLOR: #0000ff">As</span> <span style="COLOR: #000000">&nbsp;typLogInfo&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">声明变量</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">存入登录的用户名以及密码以便下面的检查时使用</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LoginInfo.UserName&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Trim</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">(txtUserName.Text)<br>&nbsp;&nbsp;&nbsp;&nbsp;LoginInfo.Pwd&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Trim</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">(txtPassword.Text)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">检查登录的名称及密码是否正确</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Call</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;loginCheck(LoginInfo)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">根据检查的结果来分支逻辑</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Select</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Case</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;LoginInfo.LogState<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Case</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;enuLogState.Success<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">欢迎您:</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">&amp;</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;LoginInfo.UserName<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Case</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;enuLogState.PwdFaile<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">密码错误</span> <span style="COLOR: #000000">"</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="COLOR: #0000ff"><font face=Georgia size=2>Case</font> </span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;enuLogState.Faile<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">用户不存在</span> <span style="COLOR: #000000">"</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Case</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Else</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">MsgBox</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">未知结果</span> <span style="COLOR: #000000">"</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Select</span> </font></font><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub</font> </span></span></div>
    <br><font face=Georgia size=2>这里的分支比较少，如果多的话优势则更明显。</font>
    <li><font face=Georgia size=2>循环语句 For ... Next / For Each ... Next，这里举一个使用 For Each 语句的示例，这种形式的运用比较多：<br></font>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font size=2><font face=Georgia><img id=Code_Closed_Image_110802 onclick="this.style.display='none'; Code_Closed_Text_110802.style.display='none'; Code_Open_Image_110802.style.display='inline'; Code_Open_Text_110802.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top> <img id=Code_Open_Image_110802 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_110802.style.display='none'; Code_Closed_Image_110802.style.display='inline'; Code_Closed_Text_110802.style.display='inline';" height=16 src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top> <span id=Code_Closed_Text_110802 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">使用For Each遍历</span> </font></font><span id=Code_Open_Text_110802 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><font size=2><font face=Georgia><span style="COLOR: #008000">'</span> <span style="COLOR: #008000">清空文本框的内容</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;clearText()<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Dim</span> <span style="COLOR: #000000">&nbsp;objTextBox&nbsp;</span> <span style="COLOR: #0000ff">As</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Control<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">For</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Each</span> <span style="COLOR: #000000">&nbsp;objTextBox&nbsp;</span> <span style="COLOR: #0000ff">In</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Me</span> <span style="COLOR: #000000">.Controls&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">使用FOR&nbsp;EACH在窗体的控件集合中遍历</span> </font></font><span style="COLOR: #008000"><br></span><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">If</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">TypeName</span> <span style="COLOR: #000000">(objTextBox)&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">TextBox</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Then</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objTextBox.Text&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">""</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font size=2><font face=Georgia><span style="COLOR: #0000ff">End</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">If</span> </font></font><span style="COLOR: #000000"><br><font face=Georgia size=2>&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="COLOR: #0000ff"><font face=Georgia size=2>Next</font> </span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub</font> </span><span style="COLOR: #000000"><br><br></span><font size=2><font face=Georgia><span style="COLOR: #0000ff">Private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">Sub</span> </font></font><font size=2><font face=Georgia><span style="COLOR: #000000">&nbsp;Form_Load()<br>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">Call</span> <span style="COLOR: #000000">&nbsp;clearText&nbsp;&nbsp;</span> <span style="COLOR: #008000">'</span> <span style="COLOR: #008000">清空窗体上文本框的内容</span> </font></font><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff"><font face=Georgia size=2>End&nbsp;Sub</font> </span></span></div>
    <li><font face=Georgia size=2>循环语句 Do ... Loop，这个需要注意的一点就是要在适当的时候记住要能够终止。</font>
    <li><font face=Georgia size=2>循环语句中选用 For ... Next 还是 Do ... Loop 没有特定的要求。For 更适于循环次数明确的情况，而 Do 适于循环次数不明，但终止条件了解的情况。</font> </li>
</ul>
<img src ="http://www.cnblogs.com/zw0736/aggbug/769841.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43598/" target="_blank">[新闻]应用程序架构指导包2.0 Beta 2发布</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>在Web Service中的异步开发模式 </title><link>http://www.cnblogs.com/zw0736/archive/2007/06/02/768558.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Sat, 02 Jun 2007 03:36:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/06/02/768558.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/768558.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/06/02/768558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/768558.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/768558.html</trackback:ping><description><![CDATA[<p><font face=Arial color=#0000ff size=4>1.异步方法的动机：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp; (1)、对于同步方法：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UI线程依赖于方法的实现：方法执行时间过长将导致UI无法及时与用户进行交互。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器线程受到其他服务器的支配。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp; (2)、线程是稀缺资源：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Windows客户端中，每个进程有单一的UI线程。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器中，可扩展性依赖于线程的使用。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp; (3)、对于异步方法：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在用户交互方面：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供良好的用户体验。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 及时交互响应。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改善可扩展性。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将服务器与通讯问题隔离。</font></p>
<p><font face=Arial color=#0000ff size=4>2.客户端异步方法基于Proxy的方法：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)、异步行为的最简单类型</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省方式。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visual Studio和WSDL.exe直接支持</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户端代理包含异步方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)、效果和影响</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;改进UI响应度</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器不需要实现异步操作(<font color=#ff0000>对服务器透明</font>)</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端能够在任何时间选择阻塞</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)、WSDL.exe可以生成异步方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将方法放入调用队列即返回</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通用.NET异步编程模式(通过BeginInvoke/EndInvoke实现)</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 充分利用delegate和IASyncResult特性(BeginXXX和EndXXX，BeginXXX返回IASyncResult(客户端可以轮询，等待，或者delegate方法))</font></p>
<p><font face=Arial color=#0000ff size=4>3.客户端异步模型结束状态查询方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp; (1)、轮询IASyncResult.IsCompleted以判断处理是否结束</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;允许客户端继续其他工作</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp; (2)、使用IASyncResult.AsyncWaitHandle</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许客户端使用wait处理语义</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp; (3)、调用delegate方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等待被运行时调用的delegate</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)、阻塞调用End方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最简单模型</font></p>
<p><font face=Arial color=#0000ff size=4>4.客户端异步方法-----线程池</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)、客户端线程池</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 性能较IAsyncResult略高</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于无响应的请求特别有用</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delegate能够被异步调用(WaitCallback)</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)、QueueUserWorkItem</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持delegate方法调用</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以选择提供参数对象</font></p>
<p><font face=Arial color=#0000ff size=4>5.服务器端异步方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp; (1)、在服务器端实现异步方法</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp; (2)、实现方式：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BeginInvoke/EndInvoke</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Soap one-way方法(单向</font><font face=Arial color=#0000ff size=4>)</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Web Services增强(WSE)</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSMQ</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)、One-Way</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将单向信息发送到端点(例如：不需要响应的请求)。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问题：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有返回值；无法判断方法结束的时间(对于结果需要显示通知或轮询)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)、通知：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从端点发送的单向消息</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端通知策略：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端能够轮询完成状态(要求客户端提供相关令牌，注意可扩展性问题)。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器能够通知客户端(WS-Eventing或者类似机制，广播通道)。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5)、One-Way方法实现：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用[SoapDocumentMethod]定义one-way方法([SoapDocumengtMethod(OneWay=true)],数据包反序列化后，服务器端方法即返回，客户端方法不会从调用的服务器端方法中收到返回值)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One-Way方法不适用于：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法需要对结果轮询(其他方法会更加合适)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法需要同步。</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp; (6)、Web Service增强(WSE)(<font style="BACKGROUND-COLOR: #00ffff" color=#ffff00>需要到Microsoft官方网站下载相关的组件与.NET整合</font>)</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSE支持面向消息的编程：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoapSender和SoapReceiver基类；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持发送和接收SoapEnvelopes；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更多的事物模型(通过SoapClient和SoapService提供)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoapSender和SoapReceiver：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端和服务器同时实现；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端使用SoapSender发送消息(可选择使用SoapReceiver接收消息)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器使用SoapReceiver接收消息(可选择使用SoapSender发送通知和回应)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (7)、使用MSMQ：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSMQ用于消息传输：</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 适用于Web Services;</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 具有可靠的异步行为(要求能够在服务中提供可靠的队列，允许多监听者使用单一队列)；</font></p>
<p><font face=Arial color=#0000ff size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持事务(同时支持本地事务和企业服务，SWC安装在Windows Server 2003和Windows XP SP2中)；</font></p>
<img src ="http://www.cnblogs.com/zw0736/aggbug/768558.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43597/" target="_blank">[新闻]推波助澜 微软推出“I'm a PC”商店</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>异步的用法(摘抄)</title><link>http://www.cnblogs.com/zw0736/archive/2007/05/27/761409.html</link><dc:creator>zwgood</dc:creator><author>zwgood</author><pubDate>Sun, 27 May 2007 03:23:00 GMT</pubDate><guid>http://www.cnblogs.com/zw0736/archive/2007/05/27/761409.html</guid><wfw:comment>http://www.cnblogs.com/zw0736/comments/761409.html</wfw:comment><comments>http://www.cnblogs.com/zw0736/archive/2007/05/27/761409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zw0736/comments/commentRss/761409.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zw0736/services/trackbacks/761409.html</trackback:ping><description><![CDATA[<p>当然首先是使用链接池了~~<br>连接池<br>Connection Timeout--尝试连接数据存储区时的等待时间默认是15秒<br>Min Pool Size-连接池的最小容量<br>Max Pool Size-连接池最大容量默认是100<br>Pooling 默认是true则请求从连接池返回一个新的连接，没有泽创建</p>
<p>Connection Reset表示在从连接池中删除数据库连接时，将会重置该连接，默认是true,如果设置成false则在创建连接时往返服务器的次数会更少但是不更新连接状态</p>
<p>如果出了毛病就~~SqlConnection.ClearAllPools();//清除连接池<br>------然后是重头戏~~自然是使用异步咯<br>1首先在连接字符串中设置一个 async=true<br>-------理论就这么多了~~看段代码爽爽把<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>31041条纪录4秒<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Data;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Configuration;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Web;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Web.Security;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Web.UI;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Web.UI.WebControls;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Web.UI.WebControls.WebParts;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Web.UI.HtmlControls;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Data.SqlClient;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;partial&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Default5&nbsp;:&nbsp;System.Web.UI.Page<br><img id=Codehighlighter1_356_1615_Open_Image onclick="this.style.display='none'; Codehighlighter1_356_1615_Open_Text.style.display='none'; Codehighlighter1_356_1615_Closed_Image.style.display='inline'; Codehighlighter1_356_1615_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_356_1615_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_356_1615_Closed_Text.style.display='none'; Codehighlighter1_356_1615_Open_Image.style.display='inline'; Codehighlighter1_356_1615_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_356_1615_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_356_1615_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Page_Load(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br><img id=Codehighlighter1_419_427_Open_Image onclick="this.style.display='none'; Codehighlighter1_419_427_Open_Text.style.display='none'; Codehighlighter1_419_427_Closed_Image.style.display='inline'; Codehighlighter1_419_427_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_419_427_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_419_427_Closed_Text.style.display='none'; Codehighlighter1_419_427_Open_Image.style.display='inline'; Codehighlighter1_419_427_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_419_427_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_419_427_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Button1_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br><img id=Codehighlighter1_494_1613_Open_Image onclick="this.style.display='none'; Codehighlighter1_494_1613_Open_Text.style.display='none'; Codehighlighter1_494_1613_Closed_Image.style.display='inline'; Codehighlighter1_494_1613_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_494_1613_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_494_1613_Closed_Text.style.display='none'; Codehighlighter1_494_1613_Open_Image.style.display='inline'; Codehighlighter1_494_1613_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_494_1613_Closed_Text style="BORDER-RIGHT: #808080 1px soli