﻿<?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/morningwang/</link><description>金鱼之博（聪明做事，低调做人。上智者必不自智，下愚者比不自愚。沉稳而不失激情，成功而不忘超越）</description><language>zh-cn</language><lastBuildDate>Tue, 14 Oct 2008 07:46:29 GMT</lastBuildDate><pubDate>Tue, 14 Oct 2008 07:46:29 GMT</pubDate><ttl>60</ttl><item><title>const和readonly区别</title><link>http://www.cnblogs.com/morningwang/archive/2008/10/10/1308325.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Fri, 10 Oct 2008 09:56:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/10/10/1308325.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1308325.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/10/10/1308325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1308325.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1308325.html</trackback:ping><description><![CDATA[<p><font face="Verdana">内容来源&lt;&lt;你必须知道的.NET&gt;&gt;</font><font face="Verdana"></p>
<p>标题：什么才是不变：const和readonly</p>
<p>时间：2008-10-10</p>
<p>内容：</p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我们都知道，const和static readonly的确很像：通过类名而不是对象名进行访问，在程序中只读等等<font face="Verdana">。在多数情况下可以混用。二者本质的区别在于，const的值是在编译期间确定的，因此只能在声明时通过常量表达式指定其值。而<font face="Verdana">static readonly是在运行时计算出其值的，所以还可以通过静态构造函数来赋值</font>。明白了这个本质区别，我们就不难看出下面的语句中static readonly和const能否互换了：</font></font></p>
<p><font face="Verdana">1. static readonly MyClass myins = new MyClass();<br />
2. static readonly MyClass myins = null;<br />
3. static readonly B = 10;&nbsp;&nbsp; static readonly A = B * 20;<br />
4. static readonly int [] constIntArray = new int[] {1, 2, 3};<br />
5. void SomeFunction()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const int a = 10;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp; }<br />
6.private static string astr="abcd";<br />
&nbsp; private const string str = astr+"efg";<br />
1：不可以换成const。new操作符是需要执行构造函数的，所以无法在编译期间确定<br />
2：可以换成const。我们也看到，Reference类型的常量（除了String）只能是Null。<br />
3：可以换成const。我们可以在编译期间很明确的说，A等于200。<br />
4：不可以换成const。道理和1是一样的，虽然看起来1,2,3的数组的确就是一个常量。<br />
5：不可以换成readonly，readonly只能用来修饰类的field，不能修饰局部变量，也不能修饰property<font face="Verdana">等其他类成员。</font></font></p>
<p>6.错误：如果在astr前加上const或者const改为readonly即可；</p>
<p><font face="Verdana">总结：1.const、readonly和static readonly定义的常量，指定初始值后(包括在构造函数内指定的初始值)&nbsp;将不可更改，可读不可写；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.const定义时必须指定初始值，而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值，</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 并以构造函数内指定的值为准；</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.const和static readonly定义的常量是静态的，只能由类直接访问；而readonly定义的常量是非静态&nbsp;的，只能由实例对象访问；&nbsp;&nbsp;</font><font face="Verdana"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 4.static readonly常量，如果在构造函数内指定初始值，则必须是静态无参构造函数；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 5.const是编译时常量，readonly是运行时常量；cosnt较高效，readonly较灵活。在应用上以static readonly代替const，以平衡const在灵活性上的不足，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时克服编译器优化cosnt性能，所带来的程序集引用不一致问题；&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p>&nbsp;</p>
</font>
<img src ="http://www.cnblogs.com/morningwang/aggbug/1308325.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42983/" target="_blank">[新闻]Silverlight对Flash 微软打垮Adobe</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>jQuery使用说明</title><link>http://www.cnblogs.com/morningwang/archive/2008/09/22/1295710.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Mon, 22 Sep 2008 03:06:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/09/22/1295710.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1295710.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/09/22/1295710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1295710.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1295710.html</trackback:ping><description><![CDATA[摘要: jQuery是一款同prototype一样优秀js开发库类，特别是对css和XPath的支持，使我们写js变得更加方便！如果你不是个js高手又想写出优 秀的js效果，jQuery可以帮你达到目的！ 下载地址：Starterkit （http://jquery.bassistance.de/jquery-starterkit.zip） jQuery Downloads （http://jquery.&nbsp;&nbsp;<a href='http://www.cnblogs.com/morningwang/archive/2008/09/22/1295710.html'>阅读全文</a><img src ="http://www.cnblogs.com/morningwang/aggbug/1295710.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42981/" target="_blank">[新闻]IBM扩大研究规模 在上海成立研究院</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页面中常用到的广告效果</title><link>http://www.cnblogs.com/morningwang/archive/2008/09/18/1293032.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Thu, 18 Sep 2008 01:41:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/09/18/1293032.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1293032.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/09/18/1293032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1293032.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1293032.html</trackback:ping><description><![CDATA[摘要: ASP.NET 项目中用到的广告效果 在ASP.NET项目开发中,会被要求添加广告,有翻屏效果、有广告轮流显示、飘浮广告、左侧广告、右侧广告等。用本贴持续记录一些收集的广告效果。希望给有需求的朋友们一些支持。也希望朋友们把我未记录的广告形式也给予一起回贴。使本贴更加的完善，也让更多的朋友们分享。1.翻屏效果翻屏效果Code highlighting produced by Actipro Code&nbsp;&nbsp;<a href='http://www.cnblogs.com/morningwang/archive/2008/09/18/1293032.html'>阅读全文</a><img src ="http://www.cnblogs.com/morningwang/aggbug/1293032.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42980/" target="_blank">[新闻]eWeek评Google八大“20%项目”</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/morningwang/archive/2008/09/11/1289095.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Thu, 11 Sep 2008 06:24:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/09/11/1289095.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1289095.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/09/11/1289095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1289095.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1289095.html</trackback:ping><description><![CDATA[<p>内容来源&lt;&lt;你必须知道的.NET&gt;&gt;</p>
<p>标题：面向对象编程：接口和抽象类</p>
<p>时间：2008-09-11</p>
<p>内容：</p>
<p><font face="Verdana">概念：<br />
1.接口--接口是包含一组虚方法的抽象类型，其中每一种方法都有其名称，返回类型和参数；接口方法不能包括任何实现；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当一个类可以实现多个接口时，不仅要实现该接口的所有方法，而且还有实现该接口从其他接口中继承的所有方法。<br />
2.抽象类--抽象类提供多个派生类共享类的公共定义，它即可以提供抽象方法，也可以提供非抽象方法。抽象类不能被实例化；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也不能被密封；如果派生类没有实现所有的抽象方法，则该派生类也必须声明为抽象类。另外，实现抽象方法由<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; override方法来完成；</font></p>
<p>代码示例：</p>
<p>1.定义抽象类</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_141824" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_141824').style.display='none'; document.getElementById('Code_Open_Image_141824').style.display='inline'; document.getElementById('Code_Open_Text_141824').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_141824" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_141824').style.display='none'; getElementById('Code_Closed_Image_141824').style.display='inline'; getElementById('Code_Closed_Text_141824').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_141824">Code</span><span id="Code_Open_Text_141824" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Animal<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_name;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">声明抽象的属性</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">声明抽象的方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Show();<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">实现一般方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MakeVoice()<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">All&nbsp;animal&nbsp;can&nbsp;make&nbsp;voice!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<p>2.定义接口</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_141947" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_141947').style.display='none'; document.getElementById('Code_Open_Image_141947').style.display='inline'; document.getElementById('Code_Open_Text_141947').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_141947" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_141947').style.display='none'; getElementById('Code_Closed_Image_141947').style.display='inline'; getElementById('Code_Closed_Text_141947').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_141947">Code</span><span id="Code_Open_Text_141947" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IAction<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_33_79_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_33_79_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_33_79_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_33_79_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_33_79_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_33_79_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_33_79_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_33_79_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_33_79_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"  alt="" /></span><span id="Codehighlighter1_33_79_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义公共的方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">4</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Move();<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<p>3.实现抽象类和接口</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_142146" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_142146').style.display='none'; document.getElementById('Code_Open_Image_142146').style.display='inline'; document.getElementById('Code_Open_Text_142146').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_142146" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_142146').style.display='none'; getElementById('Code_Closed_Image_142146').style.display='inline'; getElementById('Code_Closed_Text_142146').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_142146">Code</span><span id="Code_Open_Text_142146" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000">//</span><span style="color: #008000">Dock类</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Duck:Animal,IAction<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">构造函数</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Duck(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重载抽象方法</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Show()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(_name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;is&nbsp;showing&nbsp;for&nbsp;you!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重载抽象属性</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_name;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">实现接口方法</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Move()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Duck&nbsp;also&nbsp;can&nbsp;swim!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">Dog类</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Dog:Animal,IAction<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">构造函数</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Dog(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重载抽象属性</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_name;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重载抽象方法</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Show()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(_name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;can&nbsp;run!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">实现接口方法</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Move()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(_name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;is&nbsp;showing&nbsp;for&nbsp;you!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
<br />
<br />
</span></span></div>
<p>&nbsp;</p>
<p>4.客户端调用</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_142236" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_142236').style.display='none'; document.getElementById('Code_Open_Image_142236').style.display='inline'; document.getElementById('Code_Open_Text_142236').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_142236" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_142236').style.display='none'; getElementById('Code_Closed_Image_142236').style.display='inline'; getElementById('Code_Closed_Text_142236').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_142236">Code</span><span id="Code_Open_Text_142236" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestAnmial<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_28_314_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_28_314_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_28_314_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_28_314_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_28_314_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_28_314_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_28_314_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_28_314_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_28_314_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"  alt="" /></span><span id="Codehighlighter1_28_314_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_85_308_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_85_308_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_85_308_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_85_308_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_85_308_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_85_308_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_85_308_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_85_308_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_85_308_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"  alt="" /></span><span id="Codehighlighter1_85_308_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animal&nbsp;duckObj&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Duck(</span><span style="color: #800000">"</span><span style="color: #800000">Duck</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;duckObj.Show();<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;duckObj.MakeVoice();<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animal&nbsp;dogObj&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Dog(</span><span style="color: #800000">"</span><span style="color: #800000">Dog</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dogObj.Show();<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dogObj.MakeVoice();<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<p>结果：</p>
<p><font face="Verdana">Duck is showing for you!<br />
All animal can make voice!<br />
Dog can run!<br />
All animal can make voice!<br />
</font></p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/morningwang/aggbug/1289095.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42979/" target="_blank">[新闻]微软终于发布Silverlight 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>在ASP.NET中重写URL </title><link>http://www.cnblogs.com/morningwang/archive/2008/09/08/1286982.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Mon, 08 Sep 2008 09:59:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/09/08/1286982.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1286982.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/09/08/1286982.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1286982.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1286982.html</trackback:ping><description><![CDATA[<p>【原文地址】<a title="技巧/诀窍：在ASP.NET中重写URL" href="http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx">Tip/Trick: Url Rewriting with ASP.NET</a> </p>
<p>&nbsp;</p>
<p>经常有人请我指导应该如何动态地&#8220;重写&#8221;URL，以在他们的ASP.NETweb应用中发布比较干净的URL端点。这个博客帖子概述了几个方法，你可以用来在ASP.NET中干净地映射或重写URL，以及按照你自己的需求组织你的URL的结构。 </p>
<h5><strong>为什么URL映射和重写很重要？</strong></h5>
<p>下面是开发人员想要对URL有更大的灵活性的最常见的场景： </p>
<p>1) 处理这样的情形：你要更改你的web应用中网页的结构，但你同时也要确保在你移动网页后，那些被人收藏的老URL不会成为死链接。重写URL允许你透明地将请求转交到新的网页地址而不出错。 </p>
<p>2) 在象Google，Yahoo 和 Live 这样的搜索引擎中提高你网站上网页的搜索相关性。具体地来说，URL重写经常能使你在你网站上网页的URL里更加容易地嵌入关键词，这么做往往会增加别人点击你的链接的机会。从使用查询字符串参数到使用完全限定(fully qualified)的URL也能在某些情形下提高你在搜索引擎结果中的优先顺序。使用强制referring链接使用同样的大小写(same case)和URL入口(譬如，使用weblogs.asp.net/scottgu 而不是 weblogs.asp.net/scottgu/default.aspx)的技术也能避免因跨越多个URL而造成的网页排名(pagerank)的降低(avoid diluting your pagerank across multiple URLs)，从而增加你的搜索结果。 </p>
<p>在一个搜索引擎日渐驱动网站访问量的世界里，在你的网页排名上稍微得到一些提高就能给你的业务带来不错的投资回报(ROI)。逐渐地，这驱使开发人员使用URL重写以及其他SEO(搜索引擎优化 )技术来优化网站(注，SEO是个步调很快的空间，增加你的搜索相关性的建议月月在演变)。想了解一些关于搜索引擎优化方面好的建议的话，我建议你阅读一下《<a href="http://www.ssw.com.au/SSW/Standards/Rules/RulesToBetterGoogleRankings.aspx" target="_blank">SSW Rules to Better Google Rankings (SSW的提高Google排名之要领)</a>》，以及MarketPosition关于《<a href="http://www.marketposition.com/blog/archives/2006/04/how_urls_can_af.html" target="_blank">how URLs can affect top search engine ranking (URL会如何影响顶级搜索引擎排名)</a>》的文章。 </p>
<h5><strong>例程的URL重写场景</strong></h5>
<p>为这个博客贴子起见，我将假设我们将在一个应用里建造一套电子商务的产品目录网页，产品是按种类来组织的(譬如，图书，录像，CD，DVD等等)。 </p>
<p>让我们假定一开始我们有个网页叫Products.aspx，通过查询字符串参数接受一个类别名称，相应地过滤显示的产品。与这个Products.aspx网页对应类别的URL看上去象这样：</p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">http://www.store.com/products.aspx?category=books<br />
http://www.store.com/products.aspx?category=DVDs<br />
http://www.store.com/products.aspx?category=CDs </div>
<p>&nbsp;</p>
<p>但我们不想使用查询字符串来呈示每个类别，我们想修改应用，让每个产品类别对搜索引擎来说看上去象是一个独特的URL，并且在实际的URL中嵌入关键词(而不是通过查询字符串参数)。我们将在这个博客帖子剩下来的篇幅里，讨论一下达成这个目的我们可以采取的4种不同方法。 </p>
<p><strong>方法一：使用Request.PathInfo 参数而不是查询字符串</strong></p>
<p>我将示范的第一个方法根本不使用URL重写，而是使用ASP.NET中不太为人所知的一个特性，Request的PathInfo属性。为帮助解释这个属性的有用之处，考虑一下我们电子商店下面这些URL的情形： </p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">http://www.store.com/products.aspx/Books<br />
http://www.store.com/products.aspx/DVDs<br />
http://www.store.com/products.aspx/CDs</div>
<p>你会在上面这些URL中注意到的一个东西是，他们不再含有查询字符串值，取而代之的是，类别参数的值是附加到URL上的，是以Products.aspx网页处理器名称之后的/参数 值的方式出现的。然后，一个自动化的搜索引擎爬虫(search engine crawler)会把这些URL解释成三个不同的URL，而不是一个URL带有三个不同的输入值 (搜索引擎是不理会文件扩展名的，只把它当作URL中的另一个字符而已)。 </p>
<p>你也许很想知道怎么在ASP.NET中处理这个附加的参数的情形。好消息是，这非常简单。只要使用Request的PathInfo属性就可以了，该属性返回URL中紧随 products.aspx 后面的那部分内容。所以，对上面这些URL， Request.PathInfo会分别返回 &#8220;/Books&#8221;， &#8220;/DVDs&#8221;，和 &#8220;/CDs&#8221;(万一你想知道的话， Request的Path 属性返回&#8220;/products.aspx&#8221; )。 </p>
<p>然后，你可以轻易地编写一个函数来获取产品类别，象这样(下面这个函数去除前面的斜杠字符，只返回&#8220;Books&#8221;，&#8220;DVDs&#8221;，或 &#8220;CDs&#8221;)： </p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue">Function&nbsp;</font><font color="black">GetCategory()&nbsp;</font><font color="blue">As&nbsp;String<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;</font><font color="black">(Request.PathInfo.Length&nbsp;</font><font color="blue">=&nbsp;</font><font color="maroon">0</font><font color="black">)&nbsp;</font><font color="blue">Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;</font><font color="#808080">""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;</font><font color="black">Request.PathInfo.Substring(</font><font color="maroon">1</font><font color="black">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">End&nbsp;If<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function</font> </div>
<p>&nbsp;</p>
<p><u>样例下载</u>：我建立的一个展示这个技术的样例应用可以<a href="http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_PathInfoApproach.zip" target="_blank">在这里下载</a>。这个样例和这个技术的很好的地方在于，为部署使用这个方法的ASP.NET应用，不需作任何服务器配置改动。在共享主机的环境里，这个技术也行之有效。 </p>
<h5><strong>方法二：使用HttpModule实现URL重写 </strong></h5>
<p>上述Request.PathInfo技术的替换方法是，利用ASP.NET提供的HttpContext.RewritePath方法。这个方法允许开发人员动态地重写收到的URL的处理路径，然后让ASP.NET使用刚重写过后的路径来继续执行请求。 </p>
<p>譬如，我们可以选择向大众呈示下列URL：</p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">http://www.store.com/products/Books.aspx<br />
http://www.store.com/products/DVDs.aspx<br />
http://www.store.com/products/CDs.aspx </div>
<p>&nbsp;</p>
<p>在外界看来，网站上有三个单独的网页(对搜索爬虫而言，这看上去很棒)。通过使用 HttpContext的RewritePath方法，我们可以在这些请求刚进入服务器时，动态地把收到的URL重写成单个Products.aspx网页接受一个查询字符串的类别名称或者PathInfo参数。譬如，我们可以使用Global.asax中的Application_BeginRequest事件，来这么做： </p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue">void&nbsp;</font><font color="black">Application_BeginRequest(</font><font color="blue">object&nbsp;</font><font color="black">sender,&nbsp;EventArgs&nbsp;e)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">string&nbsp;</font><font color="black">fullOrigionalpath&nbsp;</font><font color="blue">=&nbsp;</font><font color="black">Request.Url.ToString()</font><font color="blue">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</font><font color="black">(fullOrigionalpath.Contains(</font><font color="#808080">"/Products/Books.aspx"</font><font color="black">))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context.RewritePath(</font><font color="#808080">"/Products.aspx?Category=Books"</font><font color="black">)</font><font color="blue">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="black">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">else&nbsp;if&nbsp;</font><font color="black">(fullOrigionalpath.Contains(</font><font color="#808080">"/Products/DVDs.aspx"</font><font color="black">))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context.RewritePath(</font><font color="#808080">"/Products.aspx?Category=DVDs"</font><font color="black">)</font><font color="blue">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="black">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</font> </div>
<p>&nbsp;</p>
<p>手工编写象上面这样的编码的坏处是，很枯燥乏味，而且容易犯错。我建议你别自己写，而是使用网上现成的HttpModule来完成这项工作。这有几个你现在就可以下载和使用的免费的HttpModule： </p>
<ul>
    <li><a href="http://urlrewriter.net/" target="_blank">UrlRewriter.net</a></li>
    <li><a href="http://www.urlrewriting.net/en/Default.aspx" target="_blank">UrlRewriting.net</a></li>
</ul>
<p>这些模块允许你用声明的方式在你应用的web.config文件里表达匹配规则。譬如，在你应用的web.config文件里使用<a href="http://urlrewriter.net/" target="_blank">UrlRewriter.Net模块</a>来把上面的那些URL映射到单个Products.aspx页上，我们只要把这个web.config文件添加到我们的应用里去就可以了(不用任何编码)： </p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word"><font color="blue">&lt;</font><font color="maroon">?xml</font><font color="red">&nbsp;version</font><font color="blue">="1.0"?&gt;</font><font color="black"><br />
<br />
</font><font color="blue">&lt;</font><font color="maroon">configuration</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">configSections</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">section</font><font color="red">&nbsp;name</font><font color="blue">="rewriter"</font><font color="red">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requirePermission</font><font color="blue">="false"</font><font color="red">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</font><font color="blue">="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,&nbsp;Intelligencia.UrlRewriter"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&lt;/</font><font color="maroon">configSections</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">system.web</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">httpModules</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">add</font><font color="red">&nbsp;name</font><font color="blue">="UrlRewriter"</font><font color="red">&nbsp;type</font><font color="blue">="Intelligencia.UrlRewriter.RewriterHttpModule,&nbsp;Intelligencia.UrlRewriter"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</font><font color="maroon">httpModules</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</font><font color="blue">&lt;/</font><font color="maroon">system.web</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">rewriter</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">rewrite</font><font color="red">&nbsp;url</font><font color="blue">="~/products/books.aspx"</font><font color="red">&nbsp;to</font><font color="blue">="~/products.aspx?category=books"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;</font><font color="maroon">rewrite</font><font color="red">&nbsp;url</font><font color="blue">="~/products/CDs.aspx"</font><font color="red">&nbsp;to</font><font color="blue">="~/products.aspx?category=CDs"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;</font><font color="maroon">rewrite</font><font color="red">&nbsp;url</font><font color="blue">="~/products/DVDs.aspx"</font><font color="red">&nbsp;to</font><font color="blue">="~/products.aspx?category=DVDs"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&lt;/</font><font color="maroon">rewriter</font><font color="blue">&gt;</font><font color="black">&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
</font><font color="blue">&lt;/</font><font color="maroon">configuration</font><font color="blue">&gt;</font><font color="black">&nbsp;</font> </div>
<p>&nbsp;</p>
<p>上面的HttpModule URL重写模块还支持正则表达式和URL模式匹配(以避免你在web.config 文件里硬写每个URL)。所以，不用写死类别名称，你可以象下面这样重写匹配规则，把类别名称动态地从任何/products/[类别].aspx组合的URL里取出来： </p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">&nbsp;&nbsp;<font color="blue">&lt;</font><font color="maroon">rewriter</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">rewrite</font><font color="red">&nbsp;url</font><font color="blue">="~/products/(.+).aspx"</font><font color="red">&nbsp;to</font><font color="blue">="~/products.aspx?category=$1"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
</font><font color="blue">&nbsp;&nbsp;&lt;/</font><font color="maroon">rewriter</font><font color="blue">&gt;</font><font color="black">&nbsp;&nbsp;<br />
</font></div>
<p>&nbsp;</p>
<p>这使得你的编码极其干净，并且扩展性非常之好。</p>
<p><u>样例下载</u>：我建立的一个使用UrlRewriter.Net模块展示这个技术的样例应用可以<a href="http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule1.zip" target="_blank">在这里下载</a>。 </p>
<p>这个样例和这个技术的很好的地方在于，为部署使用这个方法的ASP.NET应用，不需作任何服务器配置改动。在设置为中等信任安全等级(medium trust)的共享主机的环境里，这个技术也行之有效 (只要把文件FTP/XCOPY到远程服务器就可以了，不需要安装)。 </p>
<h5><strong>方法三：在IIS7中使用HttpModule 实现无扩展名的URL重写</strong></h5>
<p>上述的HttpModule方法在你要重写的URL含有.aspx 扩展名或者包含另一个被设置为ASP.NET处理的扩展名的情形下一切都工作。你这么做的话，不需要任何特定的服务器配置，你只要把你的应用拷贝到远程服务器，它会正常工作的。 </p>
<p>但有的时候，你要重写的URL要么拥有一个不为ASP.NET处理的文件扩展名(譬如， .jpg， .gif， 或 .htm)，要么根本没有扩展名。譬如，我们也许要把这些URL呈示成公开的产品目录网页(注意，它们没有 .aspx 扩展名)： </p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">http://www.store.com/products/Books<br />
http://www.store.com/products/DVDs<br />
http://www.store.com/products/CDs</div>
<p>在 IIS5 和 IIS6 中，使用ASP.NET处理上面这样的URL不是很容易。 IIS 5/6 使得在ISAPI扩展(ASP.NET就是这样一个扩展)里非常难以重写这些类型的URLS。你需要做的是使用ISAPI过滤器在IIS请求管道(request pipeline)的较早期实现重写。我将在下面的第四个方法里示范如何在 IIS5/6 实现这样的重写。 </p>
<p>但好消息是， <a href="http://www.iis.net/" target="_blank">IIS 7.0</a>使得处理这类情形容易之极。你现在可以在 IIS 请求管道的任何地方执行一个HttpModule，这意味着你可以使用上面的<a href="http://urlrewriter.net/" target="_blank">URLRewriter 模块</a> 来处理和重写无扩展名的URL(甚至是带有 .asp，.php，或 .jsp 扩展名的URL)。下面示范了你在IIS7中该如何配置： </p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word"><font color="blue">&lt;</font><font color="maroon">?xml</font><font color="red">&nbsp;version</font><font color="blue">="1.0"</font><font color="red">&nbsp;encoding</font><font color="blue">="UTF-8"?&gt;</font><font color="black"><br />
<br />
</font><font color="blue">&lt;</font><font color="maroon">configuration</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">configSections</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">section</font><font color="red">&nbsp;name</font><font color="blue">="rewriter"</font><font color="red">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requirePermission</font><font color="blue">="false"</font><font color="red">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</font><font color="blue">="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,&nbsp;Intelligencia.UrlRewriter"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&lt;/</font><font color="maroon">configSections</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">system.web</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">httpModules</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">add</font><font color="red">&nbsp;name</font><font color="blue">="UrlRewriter"</font><font color="red">&nbsp;type</font><font color="blue">="Intelligencia.UrlRewriter.RewriterHttpModule,&nbsp;Intelligencia.UrlRewriter"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</font><font color="maroon">httpModules</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</font><font color="blue">&lt;/</font><font color="maroon">system.web</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">system.webServer</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">modules</font><font color="red">&nbsp;runAllManagedModulesForAllRequests</font><font color="blue">="true"&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">add</font><font color="red">&nbsp;name</font><font color="blue">="UrlRewriter"</font><font color="red">&nbsp;type</font><font color="blue">="Intelligencia.UrlRewriter.RewriterHttpModule"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</font><font color="maroon">modules</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">validation</font><font color="red">&nbsp;validateIntegratedModeConfiguration</font><font color="blue">="false"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
<br />
&nbsp;&nbsp;&lt;/</font><font color="maroon">system.webServer</font><font color="blue">&gt;</font><font color="black"><br />
<br />
&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">rewriter</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="blue">&lt;</font><font color="maroon">rewrite</font><font color="red">&nbsp;url</font><font color="blue">="~/products/(.+)"</font><font color="red">&nbsp;to</font><font color="blue">="~/products.aspx?category=$1"</font><font color="red">&nbsp;</font><font color="blue">/&gt;<br />
&nbsp;&nbsp;&lt;/</font><font color="maroon">rewriter</font><font color="blue">&gt;</font><font color="black"><br />
&nbsp;&nbsp;<br />
</font><font color="blue">&lt;/</font><font color="maroon">configuration</font><font color="blue">&gt;</font><font color="black"></font> </div>
<p>&nbsp;</p>
<p>注意一下&lt;system.webServer&gt;内&lt;modules&gt;部分设置为true的runAllManagedModulesForAllRequests属性。这个属性确保来自Intelligencia的UrlRewriter.Net模块(是在IIS7正式发布前编写的)，会被调用，有机会重写到服务器的所有URL请求(包括文件夹)。上面的web.config文件非常酷之处在于： </p>
<p>1) 它在任何IIS7机器上都会工作，你不需要管理员在远程主机上启用任何东西，它也能在设置为中等信任安全等级(medium trust)的共享主机的环境场景下工作。 </p>
<p>2) 因为我在&lt;httpModules&gt;和 IIS7 的&lt;modules&gt; 部分同时配置了UrlRewriter，我既能在 VS内置的web服务器(即Cassini)中，也能在IIS7下使用同样的URL重写规则。两者完全支持无扩展名的URL重写。这使得测试和开发非常容易。 </p>
<p>IIS 7.0 将在今年的晚些时候作为Windows Longhorn服务器的一部分发布，将在几个星期内随Beta3版本的发布支持go-live许可。由于添加到IIS7中的所有的新宿主(hosting)特性，我们预期主机供应商将会非常快地开始积极提供IIS7账号，这意味着你应该很快就可以开始利用上述的无扩展名的URL重写支持。我们将在 IIS7 RTM 时段里发布一个为微软所支持的URL重写模块，该模板是免费的，你可以在IIS7上使用，并且这模块将对你web服务器上的所有内容的高级URL重写场景提供很好的支持。 </p>
<p>样例下载：我建立的一个使用IIS7和UrlRewriter.Net模块展示无扩展名URL重写技术的样例应用可以<a href="http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule2.zip" target="_blank">在这里下载</a>。 </p>
<h5><strong>方法四：在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写 </strong></h5>
<p>如果你不想等到IIS7出来才利用无扩展名的URL重写，那么你最好的措施是使用ISAPI过滤器来重写URL。我知道有2个ISAPI过滤器方案，你也许要去看一下： </p>
<ul>
    <li><a href="http://www.isapirewrite.com/" target="_blank">Helicon Tech's ISAPI Rewrite</a>: 他们提供一个99美元(可免费试用30天)的ISAPI URL重写产品完整版，以及一个免费的轻量级版本。</li>
    <li><a href="http://cheeso.members.winisp.net/IIRF.aspx" target="_blank">Ionic's ISAPI Rewrite</a>: 这可以免费下载(源码和可执行文件都可以下载)</li>
</ul>
<p>我没亲手用过上面的产品，虽然我听过到对这2个产品的好评。<a href="http://www.hanselman.com/blog/CommentView.aspx?guid=91da8c0a-537e-4bbf-abac-c6652dee7057" target="_blank">Scott Hanselman</a>和 <a href="http://www.codinghorror.com/blog/archives/000797.html" target="_blank">Jeff Atwood</a> 最近都写了精彩的博客贴子讲述使用这些产品的体验，同时提供了一些如何在这些产品中配置匹配规则的例子。Helicon Tech的ISAPI Rewrite的规则使用跟 Apache的mod_rewrite同样的句法，譬如(<a href="http://www.codinghorror.com/blog/archives/000797.html" target="_blank">取自Jeff的博客贴子</a>)： </p>
<p>
<div style="border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: courier new; background-color: #eeeeee; word-wrap: break-word">[ISAPI_Rewrite]<br />
#&nbsp;fix&nbsp;missing&nbsp;slash&nbsp;on&nbsp;folders<br />
#&nbsp;note,&nbsp;this&nbsp;assumes&nbsp;we&nbsp;have&nbsp;no&nbsp;folders&nbsp;with&nbsp;periods!<br />
RewriteCond&nbsp;Host:&nbsp;(.*)<br />
RewriteRule&nbsp;([^.?]+[^.?/])&nbsp;http\://$1$2/&nbsp;[RP]<br />
<br />
#&nbsp;remove&nbsp;index&nbsp;pages&nbsp;from&nbsp;URLs<br />
RewriteRule&nbsp;(.*)/default.htm$&nbsp;$1/&nbsp;[I,RP]<br />
RewriteRule&nbsp;(.*)/default.aspx$&nbsp;$1/&nbsp;[I,RP]<br />
RewriteRule&nbsp;(.*)/index.htm$&nbsp;$1/&nbsp;[I,RP]<br />
RewriteRule&nbsp;(.*)/index.html$&nbsp;$1/&nbsp;[I,RP]<br />
<br />
#&nbsp;force&nbsp;proper&nbsp;www.&nbsp;prefix&nbsp;on&nbsp;all&nbsp;requests<br />
RewriteCond&nbsp;%HTTP_HOST&nbsp;^test\.com&nbsp;[I]<br />
RewriteRule&nbsp;^/(.*)&nbsp;http://www.test.com/$1&nbsp;[RP]<br />
<br />
#&nbsp;only&nbsp;allow&nbsp;whitelisted&nbsp;referers&nbsp;to&nbsp;hotlink&nbsp;images<br />
RewriteCond&nbsp;Referer:&nbsp;(?!http://(?:www\.good\.com|www\.better\.com)).+<br />
RewriteRule&nbsp;.*\.(?:gif|jpg|jpeg|png)&nbsp;/images/block.jpg&nbsp;[I,O] </div>
<p>&nbsp;</p>
<p>一定要去读一下<a href="http://www.hanselman.com/blog/CommentView.aspx?guid=91da8c0a-537e-4bbf-abac-c6652dee7057" target="_blank">Scott</a>和<a href="http://www.codinghorror.com/blog/archives/000797.html" target="_blank">Jeff的贴子</a>以了解这些ISAPI 模块的详情，以及你都能用它们做些什么。 </p>
<p>注：使用ISAPI过滤器的一个坏处是，共享主机环境一般不允许你安装这样的组件，所以你要用它们的话，你要么需要一个专用的虚拟主机服务器，要么需要一个专用的主机服务器。但，如果你有一个主机计划允许你安装ISAPI的话，这会在IIS5/6下会提供最大的灵活性，让你过渡到IIS7推出为止。 </p>
<h5><strong>在URL重写里处理ASP.NET PostBack</strong></h5>
<p>大家在使用ASP.NET和重写URL时经常遇到的一个疑难杂症跟处理postback场景有关。具体地来说，当你在一个网页上放置一个 &lt;form runat="server"&gt; 控件时，ASP.NET 会自动地默认输出标识的action属性指向当前所在页面。当使用URL重写时，会出现这样的问题，&lt;form&gt; 控件显示的URL不是原先请求的URL(譬如，/products/books)，而是重写过后的URL(譬如，/products.aspx?category=books)。这意味着，当你做一个postback到服务器时，URL不再是你原先干净利落的那个了。 </p>
<p>在 ASP.NET 1.0 和1.1 中，大家经常诉诸于继承&lt;form&gt; 控件生成他们自己的控件，来正确地输出要使用的action属性。虽然这可以工作，但结果有点乱，因为这意味着你需要更新你所有的页面来使用这个另外的表单控件，而且有时在Visual Studio所见即所得设计器里也会遇上问题。 </p>
<p>好消息是，在ASP.NET 2.0中，有个比较干净的诀窍你可以用来重写&lt;form&gt;控件的action属性。具体地来说，你可利用新的<a href="http://blog.joycode.com/scottgu/archive/2006/12/01/88374.aspx" target="_blank">ASP.NET 2.0控件适配器</a>扩展架构来定制控件的输出，用你提供的值来覆盖action属性的值。<u>这不要求在你的.aspx页面里做任何编码改动</u>，而只要在你的/app_browsers文件夹里添加一个.browser文件，注册使用一个控件适配类即可输出新的action属性。
<form>
    </p>
    <p><img src="http://www.scottgu.com/blogposts/urlrewrite/step1.jpg"  alt="" /> </p>
    <p>
    <p>你可在这里查看一个我创建的样例实现，其展示了该<a href="http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule1.zip" target="_blank">如何实现与URL重写协作的表单控件适配器(Form Control Adapter)</a> 。它在我上面使用的第一个(Request.PathInfo)，第二个方法(UrlRewriter.Net 模块)中都工作，它使用Request的RawUrl属性获取原先没改写过的 URL来显示。而在第四个方法(ISAPIRewrite过滤器)中，你可以获取ISAPI过滤器保存在Request.ServerVariables["HTTP_X_REWRITE_URL"] 中的原先的URL值。 </p>
    <p>我上面的FormRewriter类实现在标准的ASP.NET和ASP.NET AJAX 1.0网页上应该都工作(如果你遇上问题的话，告诉我一声)。</p>
    <h5><strong>正确地处理CSS和图像引用</strong></h5>
    <p>不少人在第一次使用URL重写时，有时会遇上一个疑难杂症，就是他们发现他们的图像和CSS样式表引用有时会停止工作。这是因为他们在HTML网页里有对这些文件的相对引用，当你开始在应用里重写URL时，你需要意识到浏览器经常会在不同的逻辑层次结构层上(logical hierarchy levels)请求文件，而不是实际存储在服务器上的东西。 </p>
    <p>譬如，如果我们上面的/products.aspx网页对.aspx 网页里的logo.jpg有一个相对引用，但是通过 /products/books.aspx这个URL来请求的，那么浏览器在显示网页时，将会发出一个对/products/logo.jpg的请求，而不是对/logo.jpg的请求。要正确地引用这个文件，确认你用根目录限定了(root qualify)CSS和图像引用(&#8220;/style.css&#8221;，而不是 &#8220;style.css&#8221;)。对于ASP.NET控件，你也可以使用&#8220;~&#8221;句法从你应用的根目录来引用文件(譬如，&lt;asp:image imageurl="~/images/logo.jpg" runat="server"/&gt;) 。 </p>
    <p>希望本文对你有所帮助，</p>
</form>
<img src ="http://www.cnblogs.com/morningwang/aggbug/1286982.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42977/" target="_blank">[新闻]微软首次打破先例 Windows 7不再改名</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/morningwang/archive/2008/08/23/1274850.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Sat, 23 Aug 2008 14:40:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/08/23/1274850.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1274850.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/08/23/1274850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1274850.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1274850.html</trackback:ping><description><![CDATA[<strong>一、 马太效应 <br />
二、 手表定理 </strong><wbr><strong><br />
三、 不值得定律 </strong><wbr><strong><br />
四、 彼得原理 </strong><wbr><strong><br />
五、 零和游戏原理 </strong><wbr><strong><br />
六、 华盛顿合作规律 </strong><wbr><strong><br />
七、 酒与污水定律 </strong><wbr><strong><br />
八、 水桶定律 </strong><wbr><strong><br />
九、 蘑菇管理 </strong><wbr><strong><br />
</strong>
<div id="blogContainer" style="font-size: 12px;"><wbr><strong>十、  奥卡姆剃刀定律</strong><wbr><strong> </strong><wbr><br />
<br />
一、马太效应 <wbr><br />
《新约马太福音》中有这样一个故事，一个国王远行前，交给三个仆人每人一锭银子，吩咐他们： "  你们去做生意，等我回来时，再来见我。 " 国王回来时，第一个仆人说： " 主人，你交给我们的一锭银子，我已赚了 10 锭。 " 于是国王奖励他 10  座城邑。第二个仆人报告说： " 主人，你给我的一锭银子，我已赚了 5 锭。 " 于是国王例奖励了他 5 座城邑。第三个仆人报告说： "  主人，你给我的一锭银子，我一直包在手巾里存着，我怕丢失，一直没有拿出来。 " 于是国王命令将第三个仆人的一锭银子也赏给第一个仆人，并且说： "  凡是少的，就连他所有的也要夺过来。凡是多的，还要给他，叫他多多益善。 "  这就是马太效应。看看我们周围，就可以发现许多马太效应的例子。朋友多的人会借助频繁的交往得到更多的朋友；缺少朋友的人会一直孤独下去。金钱方面更是如此，即使投资回报率相同，一个比别人投资多  10 倍的人，收益也多 10 倍。 <wbr><br />
这是个赢家通吃的社会，善用马太效应，赢家就是你。 <wbr><br />
<p>对企业经营发展而言，马太效应则告诉我们，要想在某一个领域保持优势，就必须在此领域迅速做大。当你成为某个领域的领头羊的时候，即使投资回报率相同，你也能更轻易的获得比弱小的同行更大的收益。而若没有实力迅速在某个领域做大，就要不停地寻找新的发展领域，才能保证获得较好的回报。  <wbr></p>
<p>&nbsp;</p>
<p>二、手表定理 </p>
<div id="blogContainer" style="font-size: 12px;">手表定理是指一个人有一只表时，可以知道现在是几点钟，而当他同时拥有两只表时却无法确定。两只表并不能告诉一个人更准确的时间，反而会让看表的人失去对准确时间的信心。你要做的就是选择其中较信赖的一只，尽力校准它，并以此作为你的标准，听从它的指引行事。记住尼采的话：  " 兄弟，如果你是幸运的，你只需有一种道德而不要贪多，这样，你过桥更容易些。 " <wbr><br />
如果每个人都 " 选择你所爱，爱你所选择 " ，无论成败都可以心安理得。然而，困扰很多人的是：他们被 "  两只表 "  弄得无所，心身交瘁，不知自己该信仰哪一个，还有人在环境、他人的压力下，违心选择了自己并不喜欢的道路，为此而郁郁终生，即使取得了受人瞩目的成就，也体会不到成功的快乐。  <wbr><br />
手表定理在企业经营管理方面给我们一种非常直观的启发，就是对同一个人或同一个组织的管理不能同时采用两种不同的方法，不能同时设置两个不同的目标。甚至每一个人不能由两个人来同时指挥，否则将使这个企业或这个人无所适从。手表定理所指的另一层含义在于每个人都不能同时挑选两种不同的价值观，否则，你的行为将陷于混乱。  <wbr><br />
<p><br />
</p>
<p>三、不值得定律 </p>
<div id="blogContainer" style="font-size: 12px;">不值得定律最直观的表述是：不值得做的事情，就不值得做好，这个定律似乎再简单不过了，但它的重要性却时时被人们疏忘。不值得定律反映出人们的一种心理，一个人如果从事的是一份自认为不值得做的事情，往往会保持冷嘲热讽，敷衍了事的态度。不仅成功率小，而且即使成功，也不会觉得有多大的成就感。<wbr><br />
哪些事值得做呢？一般而言，这取决于三个因素。 <wbr><br />
1 、价值观。关于价值观我们已经谈了很多，只有符合我们价值观的事，我们才会满怀热情去做。  <wbr><br />
2  、个性和气质。一个人如果做一份与他的个性气质完全背离的工作，他是很难做好的，如一个好交往的人成了档案员，或一个害羞者不得不每天和不同的人打交道。  <wbr><br />
3  、现实的处境。同样一份工作，在不同的处境下去做，给我们的感受也是不同的。例如，在一家大公司，如果你最初做的是打杂跑腿的工作，你很可能认为是不值得的，可是，一旦你被提升为领班或部门经理，你就不会这样认为了。  <wbr><br />
总结一下，值得做的工作是：符合我们的价值观，适合我们的个性与气质，并能让我们看到期望。如果你的工作不具备这三个因素，你就要考虑换一个更合适的工作，并努力做好它。  <wbr><br />
<br />
<p>因此，对个人来说，应在多种可供选择的奋斗目标及价值观中挑选一种，然后为之而奋斗。 "  选择你所爱的，爱你所选择的 "  ，才可能激发我们的奋斗毅力，也才可以心安理得。而对一个企业或组织来说，则要很好地分析员工的性格特性，合理分配工作，如让成就欲较强的职工单独或牵头来完成具有一定风险和难度的工作，并在其完成时给予定时的肯定和赞扬；让依附欲较强的职工更多地参加到某个团体中共同工作；让权力欲较强的职工担任一个与之能力相适应的主管。同时要加强员工对企业目标的认同感，让员工感觉到自己所做的工作是值得的，这样才能激发职工的热情。  <wbr></p>
<p>&nbsp;</p>
<p>四、彼得原理 </p>
<div id="blogContainer" style="font-size: 12px;"><wbr>彼得原理是美国学者劳伦斯彼得在对组织中人员晋升的相关现象研究后得出的一个结论；在各种组织中，由于习惯于对在某个等级上称职的人员进行晋升提拔，因而雇员总是趋向于晋升到其不称职的地位。彼得原理有时也被称为  " 向上爬 " 原理。这种现象在现实生活中无处不在：一名称职的教授被提升为大学校长后无法胜任；一个优秀的运动员被提升为主管体育的官员，而无所作为。  <wbr><br />
对一个组织而言，一旦组织中的相当部分人员被推到了其不称职的级别，就会造成组织的人浮于事，效率低下，导致平庸者出人头地，发展停滞。因此，这就要求改变单纯的  " 根据贡献决定晋升 "  的企业员工晋升机制，不能因某个人在某一个岗位级别上干得很出色，就推断此人一定能够胜任更高一级的职务。要建立科学、合理的人员选聘机制，客观评价每一位职工的能力和水平，将职工安排到其可以胜任的岗位。不要把岗位晋升当成对职工的主要奖励方式，应建立更有效的奖励机制，更多地以加薪、休假等方式作为奖励手段。有时将一名职工晋升到一个其无法很好发挥才能的岗位，不仅不是对职工的奖励，反而使职工无法很好发挥才能，也给企业带来损失。  <wbr><br />
<p>对个人而言，虽然我们每个人都期待着不停地升职，但不要将往上爬作为自己的惟一动力。与其在一个无法完全胜任的岗位勉力支撑、无所适从，还不如找一个自己能游刃有余的岗位好好发挥自己的专长。  <wbr></p>
<p>&nbsp;</p>
<p>五、零和游戏原理 </p>
<div id="blogContainer" style="font-size: 12px;"><wbr>当你看到两位对弈者时，你就可以说他们正在玩 " 零和游戏 "  。因为在大多数情况下，总会有一个赢，一个输，如果我们把获胜计算为得 1 分，而输棋为 -1 分，那么，这两人得分之和就是： 1+ （ -1 ） =0 。  <wbr><br />
这正是 " 零和游戏 "  的基本内容：游戏者有输有赢，一方所赢正是另一方所输，游戏的总成绩永远是零。 <wbr><br />
零和游戏原理之所以广受关注，主要是因为人们发现在社会的方方面面都能发现与 " 零和游戏 "  类似的局面，胜利者的光荣后面往往隐藏着失败者的辛酸和苦涩。从个人到国家，从政治到经济，似乎无不验证了世界正是一个巨大的 " 零和游戏 "  场。这种理论认为，世界是一个封闭的系统，财富、资源、机遇都是有限的，个别人、个别地区和个别国家财富的增加必然意味着对其他人、其他地区和国家的掠夺，这是一个 "  邪恶进化论 " 式的弱肉强食的世界。 <wbr><br />
但 20  世纪人类在经历了两次世界大战，经济的高速增长、科技进步、全球化以及日益严重的环境污染之后， " 零和游戏 " 观念正逐渐被 " 双赢 "  观念所取代。人们开始认识到 " 利己 " 不一定要建立在 " 损人 " 的基础上。通过有效合作，皆大欢喜的结局是可能出现的。但从 " 零和游戏 " 走向 "  双赢 " ，要求各方要有真诚合作的精神和勇气，在合作中不要耍小聪明，不要总想占别人的小便宜，要遵守游戏规则，否则 " 双赢 "  的局面就不可能出现，最终吃亏的还是自己。 <wbr><br />
<br />
<br />
六、华盛顿合作规律。 <wbr><br />
华盛顿合作规律说的是：一个人敷衍了事，两个人互相推诿，三个人则永无成事之日。多少有点类似于我们 "  三个和尚 " 的故事。人与人的合作不是人力的简单相加，而是要复杂和微妙得多。在人与人的合作中，假定每个人的能力都为 1 ，那么 10 个人的合作结果就有时比  10 大得多，有时甚至比 1  还要小。因为人不是静止的动物，而更像方向各异的能量，相推动时自然事半功倍，相互抵触时则一事无成。我们传统的管理理论中，对合作研究得并不多，最直观的反映就是，目前的大多数管理制度和行业都是致力于减少人力的无谓消耗，而非利用组织提高人的效能。换言之，不妨说管理的主要目的不是让每个人做到最好，而是避免内耗过多。  21 世纪将是一个合作的时代，值得庆幸的是，越来越多的人已经认识到真诚合作的重要性，正在努力学习合作。<wbr>邦尼人力定律：一个人一分钟可以挖一个洞，六十个人一秒种却挖不了一个洞。  <wbr><br />
合作是一个问题，如何合作也是一个问题。  <wbr><br />
<br />
<p>七、酒与污水定律 </p>
<div id="blogContainer" style="font-size: 12px;">酒与污水定律是指，如果把一匙酒倒进一桶污水中，你得到的是一桶污水；如果把一匙污水倒进一桶酒中，你得到的还是一桶污水。几乎在任何组织里，都存在几个难弄的人物，他们存在的目的似乎就是为了把事情搞糟。他们到处搬弄是非，传播流言、破坏组织内部的和谐。最糟糕的是，他们像果箱里的烂苹果，如果你不及时处理，它会迅速传染，把果箱里其它苹果也弄烂，  " 烂苹果 "  的可怕之处在于它那惊人的破坏力。一个正直能干的人进入一个混乱的部门可能会被吞没，而一个人无德无才者能很快将一个高效的部门变成一盘散沙。组织系统往往是脆弱的，是建立在相互理解、妥协和容忍的基础上的，它很容易被侵害、被毒化。破坏者能力非凡的另一个重要原因在于，破坏总比建设容易。一个能工巧匠花费时日精心制作的陶瓷器，一头驴子一秒钟就能毁坏掉。如果拥有再多的能工巧匠，也不会有多少像样的工作成果。如果你的组织里有这样的一头驴子，你应该马上把它清除掉；如果你无力这样做，你就应该把它拴起来。  <wbr><br />
<br />
<br />
八、水桶定律  <wbr><br />
水桶定律是讲，一只水桶能装多少水，完全取决于它最短的那块木板。这就是说任何一个组织都可能面临的一个共同问题，即构成组织的各个部分往往决定了整个组织的水平。构成组织的各个部分往往是优劣不齐的，而劣质部分往往又决定整个组织的水平。<wbr>" 水桶定律 " 与 " 酒与污水定律 " 不同，后者讨论的是组织中的破坏力量，而 " 最短的木板 "  却是组织中有用的一个部分，只不过比其它部分差一些，你不能把它们当成烂苹果扔掉。强弱只是相对而言的，无法消除。问题在于你容忍这种弱点到什么程度。如果它严重到成为阻碍工作的瓶颈，就不得不有所动作。  <wbr><br />
如果你在一个组织中，你应该：  <wbr><br />
1 、确保你不是最薄弱的部分；  <wbr><br />
2 、避免或减少这一薄弱环节对你成功的影响；  <wbr><br />
<p>3  、如果不幸，你正处在这一环节中，你还可以采取有效的方法改进，或者转职去谋另一份工作。 <wbr></p>
<p>&nbsp;</p>
<p>九、蘑菇管理 </p>
<div id="blogContainer" style="font-size: 12px;">蘑菇管理是许多组织对待初出茅庐者的一种管理方法，初学者被置于阴暗的角落（不受重视的部门，或打杂跑腿的工作），浇上一头大粪（无端的批评、指责、代人受过），任其自生自灭（得不到必要的指导和提携）。相信很多人都有这样一段  " 蘑菇 " 的经历，但这不一定是什么坏事，尤其是当一切都刚刚开始的时候，当上几天 " 蘑菇 "  ，能够消除我们很多不切实际的幻想，让我们更加接近现实，看问题也更加实际，而对一个组织而言，一般地新进的人员都是一视同仁，从起薪到工作都不会有大的差别。无论你是多么优秀的人才，在刚开始的时候都只能从最简单的事情做起，  " 蘑菇 "  的经历对于成长中的年轻人来说，就像蚕茧，是羽化前必须经历的一步。所以，如何高效率地走过生命中的这一段，从中尽可能吸取经验，成熟起来，并树立良好的值得信赖的个人形象，是每个刚入社会的年轻人必须面对的课题。
<p>&nbsp;</p>
十、奥卡姆剃刀定律  <wbr><br />
如果你认为只有焦头烂额、忙忙碌碌地工作才可能取得成功，那么，你错了。  事情总是朝着复杂的方向发展，复杂会造成浪费，而效能则来自于单纯。在你做过的事情中可能绝大部分是毫无意义的，真正有效的活动只是其中的一小部分，而它们通常隐含于繁杂的事物中。找到关键的部分，去掉多余的活动，成功并不那么复杂。  <wbr><br />
奥卡姆剃刀：如无发要，勿增实体。  <wbr><br />
12 世纪，英国奥卡姆的威廉对无休无止的关于 &#8220; 共相 &#8221; 、  &#8220; 本质 &#8221; 之类的争吵感到厌倦，主张唯名论，只承认确实存在的东西，认为那些空洞无物的普遍性要领都是无用的累赘，应当被无情地 &#8220; 剃除 &#8221; 。他主张， &#8220;  如无必要，勿增实体。 &#8221; 这就是常说的 &#8220; 奥卡姆剃刀 &#8221;  。这把剃刀曾使很多人感到威胁，被认为是异端邪说，威廉本人也受到伤害。然而，这并未损害这把刀的锋利，相反，经过数百年越来越快，并早已超越了原来狭窄的领域而具有广泛的、丰富的、深刻的意义。  <wbr><br />
奥卡姆剃刀定律  在企业管理中可进一步深化为简单与复杂定律：把事情变复杂很简单，把事情变简单很复杂。这个定律要求，我们在处理事情时，要把握事情的主要实质，把握主流，解决最根本的问题。尤其要顺应自然，不要把事情人为地复杂化，这样才能把事情处理好。<wbr>  <br />
<p>自己再加一个：默菲定律 <wbr></p>
<p>默菲定律源于美国空军1949年进行的关于&#8220;急剧减速对飞行员的影响&#8221;的研究。实验的志愿者们被绑在火箭驱动的雪橇上，当飞速行驶的雪橇突然停止时，实验人员会监控他们的状况。监控器具是一种由空军上尉工程师爱德华&#183;默菲所设计的甲胄，甲胄里面装有电极。有一天，在通常认为无误的测试过程中，甲胄却没有记录任何数据，这使技术人员感到非常吃惊。默菲后来发现甲胄里面的电极每一个都放错了，于是他即席说道：如果某一事情可以有两种或者两种以上的方法来实现，而其中有一种会导致灾难性的错误，那么这一错误往往就会发生。  </p>
<div id="blogContainer" style="font-size: 12px;"><wbr><br />
默菲的这一说法后来得到广泛的流传并被总结成默菲定律：如果坏事有可能发生，不管这种可能性多么小，它总会发生，并可能引起更大的损失<wbr><a href="http://imgcache.qq.com/ac/qzone_v4/b.gif" target="_blank"><wbr><img style="vertical-align: baseline ! important;" src="http://imgcache.qq.com/ac/qzone_v4/b.gif" border="0" height="1" width="1"  alt="" /></a></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p><br />
</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div><img src ="http://www.cnblogs.com/morningwang/aggbug/1274850.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42976/" target="_blank">[新闻]亚马逊EC2云计算计划支持Windows操作系统</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/morningwang/archive/2008/08/21/1273225.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Thu, 21 Aug 2008 07:02:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/08/21/1273225.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1273225.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/08/21/1273225.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1273225.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1273225.html</trackback:ping><description><![CDATA[<p>最近一直在看&lt;&lt;你必须知道的.NET&gt;&gt;一书，感觉挺不错，现在把一些内容记录如下：</p>
<p>标题：静动之间：静态和非静态</p>
<p>时间：2008-08-21 </p>
<p>内容：</p>
<p><font face="Verdana">1.静态类与非静态类<br />
●.静态类中只能包含静态成员和静态方法，否则会抛出编译错误；<br />
&nbsp;&nbsp; 而非静态类中可以包含非静态成员和非静态方法，也可以包含<br />
&nbsp;&nbsp; 静态成员和静态方法；<br />
●.静态类不可以实例化；非静态类可以实例化。不管是静态类还是<br />
&nbsp;&nbsp; 非静态类，对于静态成员和静态方法的调用都必须通过类来实现；<br />
●.如果一个类只包含静态成员和静态方法，应该将该类标记为static，<br />
&nbsp;&nbsp; 并提供私有的构造函数来避免实例创建，其实这个也是单件模拟的体现；<br />
&nbsp; </font></p>
<p><font face="Verdana">2静态构造函数与实例构造函数<br />
静态构造函数，用户初始化类中的静态成员，包括静态字段和静态属性。<br />
静态构造函数不能参参数、不能有访问修饰符也不能为调用，通常由.NET<br />
运行库在第一次调用类成员之前执行。<br />
●.静态构造函数，可以和无参数的实例构造函数同存。虽然参数列表相同，<br />
但是二者执行的时间不同，静态构造函数在运行库加载类时执行；而实例构造<br />
函数则在实例创建时执行。<br />
●.静态构造函数，只能对静态成员进行初始化操作，不能用与非静态成员；<br />
而实例构造函数，可以初始化实例成员，也可以初始化静态成员，但是静态<br />
只读字段除外；<br />
●.静态构造函数只被执行一次，而且.NET运行库也无法确定静态构造函数什<br />
么时候被执行；而实例构造函数可以在多次实例创建时被执行多次；<br />
●.一个类只能有一个静态构造函数；而一个类可以有多个实例构造函数；<br />
●.静态成员可以在声明时初始化，也可以通过静态构造函数进行初始化，<br />
这两种初始化都只能被执行一次。一般来说，简单的静态成员在声明时初<br />
始化即可，而复杂的静态成员则选择在静态构造函数中进行初始化较佳；<br />
●.构造函数的大体执行顺序：分配静态成员的内存空间----执行静态成员初<br />
始化----执行静态构造函数----分配对象实例的内存空间----执行实例成员<br />
初始化----执行实例构造函数；</font></p>
<p><font face="Verdana">3.静态成员与实例成员<br />
●.静态成员包含静态字段和静态属性，静态字段实现为private，而静态属性<br />
一般实现为public，以体现类的封装原则；<br />
●.静态成员和类相关联，不依赖于对象而存在，只能由类访问；实例成员和<br />
具体对象相关联，只能由对象实例访问，而不能由类访问；<br />
●.静态成员属于类所有，无论创建多少实例对象，静态成员在内存中只有一份；<br />
实例成员属于类的实例所有，每创建一个实例对象，实例成员都会在内存中分配<br />
一块内存区域；</font></p>
<p><font face="Verdana">4静态方法和实例方法<br />
●.性能上，二者都差不多；<br />
●.静态方法只能访问静态成员和静态方法，可以间接通过创建实例对象来访<br />
问实例成员和实例方法；而实例方法可以直接访问实例成员和实例方法，也可以<br />
直接访问静态成员和静态方法；<br />
●.静态方法只能由类访问，实例方法只能有对象实例访问；<br />
●.静态方法中不能引用this关键字，而实例方法可以；<br />
●.静态方法不能被标记为virtual、abstract或者override，静态方法可以被派生<br />
类访问，但是不能被派生类覆写。<br />
●.Main方法为静态的，因此Main方法中不能直接访问Main所在类的实例方法和实例<br />
成员。<br />
●.静态状态必须是线程安全的。</font></p>
<img src ="http://www.cnblogs.com/morningwang/aggbug/1273225.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42975/" 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>.net开发人员应该必备的十种工具（新/旧对比）</title><link>http://www.cnblogs.com/morningwang/archive/2008/07/15/1243737.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Tue, 15 Jul 2008 15:50:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/07/15/1243737.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1243737.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/07/15/1243737.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1243737.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1243737.html</trackback:ping><description><![CDATA[&nbsp;开发人员应该下载的十种软件工具：<br />
<span style="font-family: 宋体">用于编写单元测试的</span> NUnit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://sourceforge.net/projects/nunitaddin">http://sourceforge.net/projects/nunitaddin</a></span>
<p><span style="font-family: 宋体">用于创建代码文档资料的</span> NDoc&nbsp;&nbsp; &nbsp;<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://ndoc.sourceforge.net">http://ndoc.sourceforge.net</a></span></p>
<p><span style="font-family: 宋体">用于生成解决方案的</span> NAnt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://nant.sourceforge.net">http://nant.sourceforge.net</a></span></p>
<p><span style="font-family: 宋体">用于生成代码的</span> CodeSmith</p>
<p><span style="font-family: 宋体">用于监视代码的</span> FxCop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://www.gotdotnet.com/team/fxcop">http://www.gotdotnet.com/team/fxcop</a></span></p>
<p><span style="font-family: 宋体">用于编译少量代码的</span> Snippet Compiler</p>
<p><span style="font-family: 宋体">用于生成正则表达式的</span> Regulator</p>
<p><span style="font-family: 宋体">两种不同的转换器工具：</span>ASP.NET <span style="font-family: 宋体">版本转换器和</span> Visual Studio .NET <span style="font-family: 宋体">项目转换器</span></p>
<p><span style="font-family: 宋体">用于分析程序集的</span> .NET Reflector&nbsp;&nbsp; <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://www.aisto.com/roeder/dotnet">http://www.aisto.com/roeder/dotnet</a></span><br />
<br />
最新整理出的十种软件工具：<br />
1. Snippet Compiler：用来编写、编译和运行代码的基于Windows的小型应用程序 <br />
2. Microsoft Source Analysis for C#：是一款C#代码规范检查工具 <br />
3.GhostDoc：Visual Studio的一个免费插件<br />
4.Sandcastle：帮助文档生成工具 <br />
5.Nunit：开放源代码单元测试框架<br />
6.MyGeneration ：代码生成工具 <br />
7.Reflector for .NET：类浏览器和反编译器 <br />
8.The Regulator：生成和测试正则表达式<br />
9.LINQPad：集成在.NET编程语言中的一种特性 <br />
10.NAnt：基于 .NET 的生成工具<br />
<br />
以上并附有部分下载地址。</p>
<img src ="http://www.cnblogs.com/morningwang/aggbug/1243737.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42974/" target="_blank">[新闻]微软12月举办硬件工程大会 Windows7将首次亮相</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>(转)几种流行的JS框架的选择 </title><link>http://www.cnblogs.com/morningwang/archive/2008/06/26/1230366.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Thu, 26 Jun 2008 05:15:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/06/26/1230366.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1230366.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/06/26/1230366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1230366.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1230366.html</trackback:ping><description><![CDATA[目前来看，JS框架以及一些开发包和库类有如下几个，<a href="http://dojotoolkit.org/">Dojo</a> 、<a href="http://script.aculo.us/">Scriptaculous</a> 、<a href="http://prototype.conio.net/">Prototype</a> 、<a href="http://developer.yahoo.com/yui/">yui-ext</a> 、<a href="http://docs.jquery.com/Main_Page">Jquery</a> 、<a href="http://www.mochikit.com/">Mochikit</a>、<a href="http://mootools.net/download">mootools</a> 、<a href="http://moofx.mad4milk.net/">moo.fx<br />
</a><br />
<p>Ajaxian在2007年底对Ajax工具进行了调查，部分调查结果见下表（其中数字为调查者使用该工具的百分比，详细的请参见网页）：<a href="http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results">http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results</a></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 403.75pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="538" border="1">
    <tbody>
        <tr>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 0.5pt solid; width: 51.7pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="69"><span><font size="3"><font color="#000000"><font face="Times New Roman">Prototype</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 45.1pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="60"><span><font size="3"><font color="#000000"><font face="Times New Roman">jQuery</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 29.2pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">Ext</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 73.25pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="98"><span><font size="3"><font color="#000000"><font face="Times New Roman">Script.aculo.us</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 54.25pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="72"><span><font size="3"><font color="#000000"><font face="Times New Roman">Mootools</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 29.5pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">YUI</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 35.9pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="48"><span><font size="3"><font color="#000000"><font face="Times New Roman">JSON</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 33.8pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="45"><span><font size="3"><font color="#000000"><font face="Times New Roman">Dojo</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; border-top: black 0.5pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 51.05pt; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="68"><span><font size="3"><font color="#000000"><font face="Times New Roman">Backbase</font></font></font></span></td>
        </tr>
        <tr>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 0.5pt solid; width: 51.7pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="69"><span><font size="3"><font color="#000000"><font face="Times New Roman">34.1%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 45.1pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="60"><span><font size="3"><font color="#000000"><font face="Times New Roman">29.3%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 29.2pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">22.5%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 73.25pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="98"><span><font size="3"><font color="#000000"><font face="Times New Roman">22.3%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 54.25pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="72"><span><font size="3"><font color="#000000"><font face="Times New Roman">14.3%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 29.5pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">13%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 35.9pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="48"><span><font size="3"><font color="#000000"><font face="Times New Roman">12.9%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 33.8pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="45"><span><font size="3"><font color="#000000"><font face="Times New Roman">11.8%</font></font></font></span></td>
            <td style="border-right: black 0.5pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 51.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 0.5pt solid; background-color: transparent" valign="top" width="68"><span><font size="3"><font color="#000000"><font face="Times New Roman">8.3%</font></font></font></span></td>
        </tr>
    </tbody>
</table>
<p>其中Prototype使用率最高，很大程度上是因为它是最早成熟的框架，很多以前在项目中采用，所以现在一直在用</p>
<fieldset><legend>Dojo</legend><br />
<br />
主页：<a href="http://dojotoolkit.org/">http://dojotoolkit.org/</a>
<p><strong>优点<br />
</strong>背后强大的支持：IBM、Sun、BEA等，这是非常重要的优势。<br />
功能的强大，Full Stack的框架，扩展了DHTML的能力，例如：<br />
支持与浏览器Back/Forward按钮的集成。<br />
Dojo Offline，一个跨平台的离线存储API。<br />
Chart组件，可以方便地在浏览器端生成图表。<br />
基于SVG/VML的矢量图形库。<br />
Google Maps、Yahoo! Maps组件，方便开发Mashup应用。<br />
Comet支持，通过通用的Buyeux协议。<br />
强大的UI（Dijit）。<br />
面向对象的设计，统一的命名空间，包管理机制（The Package System and Custom Builds）<br />
可扩展性。</p>
<p>缺点<br />
复杂，学习曲线陡。<br />
文档的极端不全，这是一个很大的问题。<br />
API很多不稳定，各版本间改动较大，现在还不是一个成熟的框架。<br />
侵入性太大，页面中大量使用dojo的属性，例如&lt;button dojoType="dijit.form.Button" id="helloButton"&gt;，如果将来dojo升级或者换一个框架时，负担会很大。<br />
性能问题，由于dojo加载采用了同步的机制，会暂时锁定浏览器，导致CPU使用率达到100%。另外，很多Widget的速度很慢。</p>
</fieldset>
<fieldset><br />
<legend>Mootools<br />
</legend><br />
<br />
<br />
主页：<a href="http://mootools.net/">http://mootools.net/</a>
<p><strong>设计思想<br />
</strong>面向对象的设计思想。</p>
<p><strong>优点<br />
</strong>模块化，各模块代码非常独立，最小的核心只有8k，最大的优点是可选择使用哪些模块，用的时候只导入使用的模块即可，完整的也不到180k（没有压缩），压缩后不到70k。<br />
语法的简洁，直观。<br />
特效（Effects）：这一点比jQuery稍强，现在也正在开发Mootools UI（这应该是Ajax框架开发的一个趋势）。<br />
代码写的优美，易阅读和修改。<br />
文档的完整（最新的1.2beta的文档比以前更详细）。<br />
活跃的社区：官网(<a href="http://forum.mootools.net/">http://forum.mootools.net/</a>)，还有一个IRC。<br />
性能：见：<a href="http://mootools.net/slickspeed/">http://mootools.net/slickspeed/</a></p>
<p><strong>缺点</strong><br />
修改了低层的一些类：如Array, String等，这也是设计思想的不同。<br />
在DOM和CSS Selector上不如jQuery强大。</p>
</fieldset>
<p>&nbsp;</p>
<fieldset><legend>JQuery</legend>
<p>主页：<a href="http://jquery.com/">http://jquery.com/</a></p>
<p><strong>设计思想<br />
</strong>简洁的思想：几乎所有操作都是以选择DOM元素（有强大的Selector）开始，然后是对其的操作（Chaining等特性）。</p>
<p><strong>优点</strong><br />
小，压缩后代码只有20多k（无压缩代码94k）。<br />
Selector和DOM操作的方便：jQuery的Selector与mootools的Element.Selectors.js比较，CSS Selector, XPath Selector（1.2后已删除）<br />
Chaining：总是返回一个jQuery对象，可以连续操作。<br />
文档的完整，易用性（每个API都有完整的例子，这是其它框架现在不能比的），而且网上还有很多其它的文档，书籍。<br />
应用的广泛，包括google code也使用了jQuery。</p>
<p><strong>使用jQuery的站点：</strong><a href="http://docs.jquery.com/Sites_Using_jQuery"><strong>http://docs.jquery.com/Sites_Using_jQuery</strong></a><br />
核心的开发团队和核心人员：John Resig等。<br />
简洁和简短的语法，容易记。<br />
可扩展性：有大量用户开发的插件可供使用（<a href="http://jquery.com/plugins/">http://jquery.com/plugins/</a>）<br />
jQuery UI（<a href="http://jquery.com/plugins/">http://jquery.com/plugins/</a>，基于jQuery，但和核心的jQuery是独立的），不断发展中。<br />
友好和活跃的社区：google groups: <a href="http://docs.jquery.com/Discussion">http://docs.jquery.com/Discussion</a><br />
事件处理有很多方便的方法，如click，而不是单一的addEvent之类的。</p>
<p><strong>缺点</strong><br />
由于设计思想是追求高效和简洁，没有面向对象的扩展。设计思路和Mootools不一样。<br />
CSS Selector的速度稍微有些慢（但是现在速度已经大幅提高）</p>
<p><strong>设计思想<br />
</strong>简洁的思想：几乎所有操作都是以选择DOM元素（有强大的Selector）开始，然后是对其的操作（Chaining等特性）。</p>
<p><strong>优点</strong><br />
小，压缩后代码只有20多k（无压缩代码94k）。<br />
Selector和DOM操作的方便：jQuery的Selector与mootools的Element.Selectors.js比较，CSS Selector, XPath Selector（1.2后已删除）<br />
Chaining：总是返回一个jQuery对象，可以连续操作。<br />
文档的完整，易用性（每个API都有完整的例子，这是其它框架现在不能比的），而且网上还有很多其它的文档，书籍。<br />
应用的广泛，包括google code也使用了jQuery。</p>
</fieldset> <br />
<fieldset><legend><strong>Ext JS</strong><br />
</legend>主页：<a href="http://extjs.com/">http://extjs.com/</a>
<p><strong>设计思想</strong><br />
组件化，推进RIA（Rich Internet Application）的应用。</p>
<p><strong>优点</strong><br />
强大的UI，而且性能不错，这是其最大的优点。<br />
速度快，管是UI还是其它模块。<br />
100%面向对象和组件化的思想，一致的语法，全局的命名空间。<br />
文档的完整，规范，方便。<br />
核心的开发团队，Jack Slocum等。<br />
活跃的社区，迅速增加的用户量。<br />
模块化实现，可扩展性强。<br />
所有的组件（widgets）都可直接使用，而无需进行设置（当然，用户可以选择重新配置）。</p>
<p><strong>缺点<br />
</strong>稍复杂。<br />
为重量级的框架（包含大量UI），体积大。如果导入ext-all.js，压缩后也有近500k。</p>
<p>注意：EXT的商业使用：如果只是把extjs包含在自己的项目中，而且这个项目不是卖给用户做二次开发的工具箱，或组件库，就可以遵守LGPL协议免费使用；否则要付费。</p>
</fieldset>
<p>&nbsp;<br />
</p>
<fieldset><legend><strong>总结</strong></legend>轻量级选择<br />
轻量级的选择：主要是mootools和jquery，由于它们的设计思想的不同，jQuery是追求简洁和高效，Mootools除了追求这些目标以外，其核心在于面向对象，所以jQuery适合于快速开发，Mootools适合于稍大型和复杂的项目，其中需要面向对象的支持；另外，在Ajax的支持上，jQuery稍强一些；在Comet的支持上，jQuery有相关的插件，Mootools目前没有，但是Comet的核心在于服务器的支持，浏览器端的接口很简单，开发相关的插件很简单。
<p>在面向对象的Javascript Library中，mootools逐渐战胜了prototype（体积大，面向对象的设计不合理等），也包括script.acul.ous（基于prototype，实际上就是prototype上的UI库）。</p>
<p>面向RIA的框架</p>
<p>考虑纯JavaScripty库，目前主要是Dojo和ExtJS（还有YUI）。Dojo更适合企业应用和产品开发的需要，因为离线存储、DataGrid、2D、3D图形、Chart、Comet等组件对于企业应用来说都是很重要的（当然这些组件还要等一段时间才能稳定下来）。例如，BEA基于Mashup技术开发的产品中已经使用了Dojo。</p>
<p>ExtJS：美观和"易用"，并且足够强大。在对UI有比较大的需求时，是首选。</p>
</fieldset>
<p><br />
<br />
</p>
<img src ="http://www.cnblogs.com/morningwang/aggbug/1230366.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42973/" target="_blank">[新闻]电脑程序与12位真人聊天 “艾尔博特”骗过3人</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>ActionScript3系列课程（二）----流程控制和函数 </title><link>http://www.cnblogs.com/morningwang/archive/2008/06/13/1218783.html</link><dc:creator>金鱼</dc:creator><author>金鱼</author><pubDate>Thu, 12 Jun 2008 17:04:00 GMT</pubDate><guid>http://www.cnblogs.com/morningwang/archive/2008/06/13/1218783.html</guid><wfw:comment>http://www.cnblogs.com/morningwang/comments/1218783.html</wfw:comment><comments>http://www.cnblogs.com/morningwang/archive/2008/06/13/1218783.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/morningwang/comments/commentRss/1218783.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/morningwang/services/trackbacks/1218783.html</trackback:ping><description><![CDATA[一.流程控制<br />
<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"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">package<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_8_819_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_8_819_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_8_819_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_8_819_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_8_819_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_8_819_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_8_819_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_8_819_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_8_819_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"  alt="" /></span><span id="Codehighlighter1_8_819_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.display.Sprite;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Lesson2&nbsp;extends&nbsp;Sprite<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_80_817_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_80_817_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_80_817_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_80_817_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_80_817_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_80_817_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_80_817_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_80_817_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_80_817_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"  alt="" /></span><span id="Codehighlighter1_80_817_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Lesson2()<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_112_814_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_112_814_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_112_814_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_112_814_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_112_814_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_112_814_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_112_814_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_112_814_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_112_814_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"  alt="" /></span><span id="Codehighlighter1_112_814_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_117_237_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_117_237_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_117_237_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_117_237_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_117_237_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_117_237_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_117_237_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_117_237_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_117_237_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">/**/</span><span id="Codehighlighter1_117_237_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于if-else、while、for、break、continue和switch和C#一样，这里就不多描述了<br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：if<img src="http://www.cnblogs.com/Images/dot.gif"  alt="" />else&nbsp;if<img src="http://www.cnblogs.com/Images/dot.gif"  alt="" />else建议把精确范围小的条件表达式放到最前面&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;