<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_首页</title><subtitle type="text">代码改变世界</subtitle><id>http://feed.cnblogs.com/blog/sitehome/rss</id><updated>2012-02-10T01:35:40Z</updated><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/sitehome/rss"/><entry><id>http://www.cnblogs.com/artech/archive/2012/02/10/wcf-rest-output-caching.html</id><title type="text">[WCF REST] 通过ASP.NET Output Caching实现声明式缓存</title><summary type="text">ASP.NET的输出缓存（Output Caching）机制允许我们针对整个Web页面或者页面的某个部分（主要针对用户控件）最终呈现的HTML进行缓存。对于后续针对相同资源的请求，只需要直接将缓存的HTML予以回复而无须按照页面处理生命周期对每次请求进行重复处理。WCF通过操作行为AspNetCacheProfileAttribute利用ASP.NET的输出缓存提供一种针对于某个操作的声明式缓存机制。</summary><published>2012-02-10T00:58:00Z</published><updated>2012-02-10T00:58:00Z</updated><author><name>Artech</name><uri>http://www.cnblogs.com/artech/</uri></author><link rel="alternate" href="http://www.cnblogs.com/artech/archive/2012/02/10/wcf-rest-output-caching.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/artech/archive/2012/02/10/wcf-rest-output-caching.html"/><content type="html">&lt;p&gt;ASP.NET的输出缓存（Output Caching）机制允许我们针对整个Web页面或者页面的某个部分（主要针对用户控件）最终呈现的HTML进行缓存。对于后续针对相同资源的请求，只需要直接将缓存的HTML予以回复而无须按照页面处理生命周期对每次请求进行重复处理。WCF通过操作行为&lt;a title="AspNetCacheProfileAttribute Class" href="http://msdn2.microsoft.com/ee474746.aspx"&gt;AspNetCacheProfileAttribute&lt;/a&gt;利用ASP.NET的输出缓存提供一种针对于某个操作的声明式缓存机制。[源代码从&lt;a href="http://files.cnblogs.com/artech/output.caching.rar"&gt;这里&lt;/a&gt;下载]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font style="font-weight: bold"&gt;一、AspNetCacheProfileAttribute&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;WCF对ASP.NET缓存的支持是通过AspNetCacheProfileAttribute特性来实现的。通过如下的代码我们不难看出AspNetCacheProfileAttribute是实现了IOperationBehavior接口的操作行为，我们可以直接将其应用到契约接口/类中的某个具有缓存需要的操作方法上。&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; [AttributeUsage(AttributeTargets.Method)]&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; AspNetCacheProfileAttribute : Attribute, IOperationBehavior&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//其他成员&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; AspNetCacheProfileAttribute(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; cacheProfileName);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; CacheProfileName { get; }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;AspNetCacheProfileAttribute构造函数参数cacheProfileName表示的CacheProfile的配置名称，目标操作按照定义在相应CacheProfile的缓存策略实施缓存。CacheProfile配置在&amp;lt;system.web&amp;gt;/&amp;lt;caching&amp;gt;/&amp;lt;outputCacheSettings&amp;gt;/&amp;lt;outputCacheProfiles&amp;gt;节点下。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;localDb&amp;quot;&lt;/span&gt; &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;          &lt;span style="color: #ff0000"&gt;connectionString&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Server=.; Database=TestDb; Uid=sa; Pwd=password&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;          &lt;span style="color: #ff0000"&gt;providerName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.web&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;caching&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheProfiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;default&amp;quot;&lt;/span&gt; &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;                &lt;span style="color: #ff0000"&gt;duration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;                &lt;span style="color: #ff0000"&gt;varyByParam&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;none&amp;quot;&lt;/span&gt; &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;                &lt;span style="color: #ff0000"&gt;sqlDependency&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;TestDb: TestTable&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheProfiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;sqlCacheDependency&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;databases&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;TestDb&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;connectionStringName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;localDb&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;databases&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;sqlCacheDependency&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;caching&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.web&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在如上所示的配置片断中，我们定义了一个名称为default的CacheProfile。代表缓存时间的duration属性被设置为60，意味着缓存项在被存储之后1分钟之后实失效；属性varyByParam被设置为none表示缓存项与请求的查询字符串无关。此外，该CacheProfile还设置针对某个本地数据库中的TestTable表的SQL依赖（SQL Dependency）。关于CacheProfile的配置属于ASP.NET的范畴，在这里我们不会作过多的讨论。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;既然是采用ASP.NET输出缓存，WCF服务自然需要采用IIS寄宿并采用ASP.NET 兼容模式。值得一提的是，基于AspNetCacheProfileAttribute的输出缓存仅仅针对&lt;font color="#ff0000"&gt;HTTP-GET&lt;/font&gt;。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font style="font-weight: bold"&gt;二、实例演示：创建采用输出缓存的服务&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;接下来我们通过一个简单的实例来演示如何通过操作行为对某个操作的返回值实施缓存，为此我们创建一个用于返回当前时间的服务。如下所示的是作为服务契约的ITime接口的定义，AspNetCacheProfileAttribute特性被应用到了用于返回当前时间的操作方法GetCurrentTime上。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.ServiceModel;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.ServiceModel.Web;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Artech.WcfServices.Service.Interface&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     [ServiceContract(Namespace = &lt;span style="color: #006080"&gt;&amp;quot;http://www.artech.com/&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; ITime&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;         [WebGet(UriTemplate = &lt;span style="color: #006080"&gt;&amp;quot;/current&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         [AspNetCacheProfile(&lt;span style="color: #006080"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         DateTime GetCurrentTime();&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;实现了契约接口ITime的服务类型TimeService定义如下。我们将AspNetCompatibilityRequirementsAttribute特性应用在服务类型上并将RequirementsMode属性设置为Allowed以提供对ASP.NET兼容模式的支持。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.ServiceModel.Activation;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Artech.WcfServices.Service.Interface;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Artech.WcfServices.Service&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [AspNetCompatibilityRequirements(&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; TimeService : ITime&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; DateTime GetCurrentTime()&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; DateTime.Now;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在一个Web项目中我们为通过IIS寄宿的服务TimeService添加一个对应的.svc文件（TimeService.svc），如下所示的是&amp;lt;%@ServiceHost%&amp;gt;指令的定义。表示ServiceHostFactory类型的指令属性Factory被设置为System.ServiceModel.Activation.WebServiceHostFactory.&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="background-color: #ffff00"&gt;&amp;lt;%@ ServiceHost Service=&amp;quot;Artech.WcfServices.Service.TimeService&amp;quot; Factory=&amp;quot;System.ServiceModel.Activation.WebServiceHostFactory&amp;quot;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;我们在作为服务宿主的Web项目下添加一个配置文件（Web.config）并定义如下的配置。除了服务寄宿的基本配置外，我们将&amp;lt;system.serviceModel&amp;gt;/&amp;lt;serviceHostingEnvironment &amp;gt;配置节的aspNetCompatibilityEnabled属性设置为True以开启ASP.NET兼容模式。应用在操作方法GetCurrentTime上的AspNetCacheProfileAttribute特性中指定的名称为default的CacheProfile定义在该配置中，duration和varyByParam分别被设置为60和none。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;service&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Artech.WcfServices.Service.TimeService&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;webHttpBinding&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;                           &lt;span style="color: #ff0000"&gt;contract&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Artech.WcfServices.Service.Interface.ITime&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;service&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceHostingEnvironment&lt;/span&gt; &lt;span style="color: #ff0000"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.web&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;caching&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheProfiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;default&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;duration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;varyByParam&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;none&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheProfiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;      &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;caching&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.web&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;作为客户端的控制台程序在进行了相应配置之后通过如下的代码进行服务的调用。在这段代码中，我们通过创建的服务代理进行了5次服务调用，并将获取的时间打印出来。每次服务的时间间隔为1秒。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (ChannelFactory&amp;lt;ITime&amp;gt; channelFactory =  &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChannelFactory&amp;lt;ITime&amp;gt;(&lt;span style="color: #006080"&gt;&amp;quot;timeService&amp;quot;&lt;/span&gt;))&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     ITime proxy = channelFactory.CreateChannel();&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++)&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     { &lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         Console.WriteLine(proxy.GetCurrentTime().ToLongTimeString());&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         Thread.Sleep(1000);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;客户端代码执行之后会在控制台上输出如下的结果。由于服务端通过ASP.NET的输出缓存对第一次执行GetCurrentTime操作的结果进行了缓存，所以客户端返回的时间都是相同的。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; 4:48:43 PM&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; 4:48:43 PM&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; 4:48:43 PM&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; 4:48:43 PM&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; 4:48:43 PM&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font style="font-weight: bold"&gt;三、 AspNetCacheProfileAttribute是如何实现输出缓存的？&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;既然我们采用ASP.NET兼容模式来寄宿服务，意味着我们调用某个服务与访问某个页面没有本质的区别，所以基于Web页面的输出缓存能够应用于基于某个服务操作的调用就不足为奇了。现在有这么一个问题：通过AspNetCacheProfileAttribute特性指定CacheProfile是如何生效的？&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果对ASP.NET具有一定的了解，应该知道可以通过当前HttpResponse（HttpContext.Current.Response）的Cache属性表示的HttpCachePolicy对象来控制当前输出缓存的基本策略。实际上AspNetCacheProfileAttribute就是通过这种方式将定义在指定CacheProfile的缓存策略应用到针对当前操作的调用上的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;具体来说，AspNetCacheProfileAttribute针对输出缓存策略的控制是通过一个实现了接口IParameterInspector的自定义参数检验器实现的，这是一个名称为CachingParameterInspector的内部类型。操作行为AspNetCacheProfileAttribute通过实现的ApplyDispatchBehavior方法将针对某个CacheProfile创建的CachingParameterInspector对象添加到当前分发操作（DispatchOperation）的参数检验器列表中。&lt;/p&gt;&#xD;
&#xD;
&lt;div id="codeSnippetWrapper"&gt;&#xD;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CachingParameterInspector : IParameterInspector&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; CachingParameterInspector(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; cacheProfileName);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; BeforeCall(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; operationName, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] inputshens);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; AfterCall(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; operationName, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] outputs, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; returnValue, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; correlationState)&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color: #008000"&gt;//将指定CacheProfile的输出缓存策略应用到当前HttpResponse&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&#xD;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;如上面的代码片断所示，当AfterCall方法被执行的之后，在构造函数中指定的CacheProfile定义的输出缓存策略应用到当前HttpResponse。而AfterCall会在操作执行之后，回复消息序列化之前被执行。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/artech/aggbug/2344806.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/artech/archive/2012/02/10/wcf-rest-output-caching.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html</id><title type="text">深入理解JavaScript系列（20）：《你真懂JavaScript吗？》答案详解</title><summary type="text">介绍昨天发的《大叔手记（19）：你真懂JavaScript吗？》里面的5个题目，有很多回答，发现强人还是很多的，很多人都全部答对了。今天我们来对这5个题目详细分析一下，希望对大家有所帮助。注：问题来着大名鼎鼎的前端架构师Baranovskiy的帖子《So, you think you know JavaScript?》。答案也是来着大名鼎鼎的JS牛人Nicholas C. Zakas的帖子《Answering Baranovskiy’s JavaScript quiz》——《JavaScript高级程序设计》一书的原作者(但题目2的解释貌似有点问题）OK，我们先看第一题题目1if (!(&amp;qu</summary><published>2012-02-10T00:54:00Z</published><updated>2012-02-10T00:54:00Z</updated><author><name>汤姆大叔</name><uri>http://www.cnblogs.com/TomXu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html"/><content type="html">&lt;p&gt;&lt;strong&gt;介绍&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;昨天发的&lt;a href="http://www.cnblogs.com/TomXu/archive/2012/02/09/2330578.html" target="_blank"&gt;《大叔手记（19）：你真懂JavaScript吗？》&lt;/a&gt;里面的5个题目，有很多回答，发现强人还是很多的，很多人都全部答对了。&lt;/p&gt;&#xD;
&lt;p&gt;今天我们来对这5个题目详细分析一下，希望对大家有所帮助。&lt;/p&gt;&#xD;
&lt;p&gt;注：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;问题来着大名鼎鼎的前端架构师Baranovskiy的帖子《&lt;a href="http://dmitry.baranovskiy.com/post/91403200" target="_blank"&gt;So, you think you know JavaScript?&lt;/a&gt;》。&lt;br /&gt;答案也是来着大名鼎鼎的JS牛人Nicholas C. Zakas的帖子《&lt;a href="http://www.nczonline.net/blog/2010/01/26/answering-baranovskiys-javascript-quiz/" target="_blank"&gt;Answering Baranovskiy&amp;rsquo;s JavaScript quiz&lt;/a&gt;》&amp;mdash;&amp;mdash;《JavaScript高级程序设计》一书的原作者&lt;br /&gt;(但题目2的解释貌似有点问题）&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;OK，我们先看第一题&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;题目1&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!("a" &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; window)) {&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a = 1;&lt;br /&gt;}&lt;br /&gt;alert(a);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;代码看起来是想说：如果window不包含属性a，就声明一个变量a，然后赋值为1。&lt;/p&gt;&#xD;
&lt;p&gt;你可能认为alert出来的结果是1，然后实际结果是&amp;ldquo;undefined&amp;rdquo;。要了解为什么，我们需要知道JavaScript里的3个概念。&lt;/p&gt;&#xD;
&lt;p&gt;首先，所有的全局变量都是window的属性，语句 var a = 1;等价于window.a = 1; 你可以用如下方式来检测全局变量是否声明：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;"变量名称" &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; window&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第二，所有的变量声明都在范围作用域的顶部，看一下相似的例子：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;alert("a" &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; window);&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;此时，尽管声明是在alert之后，alert弹出的依然是true，这是因为JavaScript引擎首先会扫墓所有的变量声明，然后将这些变量声明移动到顶部，最终的代码效果是这样的：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a;&lt;br /&gt;alert("a" &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; window);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这样看起来就很容易解释为什么alert结果是true了。&lt;/p&gt;&#xD;
&lt;p&gt;第三，你需要理解该题目的意思是，变量声明被提前了，但变量赋值没有，因为这行代码包括了变量声明和变量赋值。&lt;/p&gt;&#xD;
&lt;p&gt;你可以将语句拆分为如下代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;声明&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;a = 1;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化赋值&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;当变量声明和赋值在一起用的时候，JavaScript引擎会自动将它分为两部以便将变量声明提前，不将赋值的步骤提前是因为他有可能影响代码执行出不可预期的结果。&lt;/p&gt;&#xD;
&lt;p&gt;所以，知道了这些概念以后，重新回头看一下题目的代码，其实就等价于：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!("a" &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; window)) {&lt;br /&gt;    a = 1;&lt;br /&gt;}&lt;br /&gt;alert(a);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这样，题目的意思就非常清楚了：首先声明a，然后判断a是否在存在，如果不存在就赋值为1，很明显a永远在window里存在，这个赋值语句永远不会执行，所以结果是undefined。&lt;/p&gt;&#xD;
&lt;p&gt;大叔注：&lt;em&gt;&lt;strong&gt;提前&lt;/strong&gt;&lt;/em&gt;这个词语显得有点迷惑了，其实就是执行上下文的关系，因为执行上下文分2个阶段：进入执行上下文和执行代码，在进入执行上下文的时候，创建变量对象VO里已经有了：函数的所有形参、所有的函数声明、所有的变量声明&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;VO(global) = {&lt;br /&gt;    a: undefined&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个时候a已经有了；&lt;/p&gt;&#xD;
&lt;p&gt;然后执行代码的时候才开始走if语句，详细信息请查看&lt;a href="http://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html" target="_blank"&gt;《深入理解JavaScript系列（12）：变量对象（Variable Object）》&lt;/a&gt;中的处理上下文代码的2个阶段小节。&lt;/p&gt;&#xD;
&lt;p&gt;大叔注：相信很多人都是认为a在里面不可访问，结果才是undefined的吧，其实是已经有了，只不过初始值是undefined，而不是不可访问。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;题目2&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a = 1,&lt;br /&gt;    b = &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; a(x) {&lt;br /&gt;        x &amp;amp;&amp;amp; a(--x);&lt;br /&gt;    };&lt;br /&gt;alert(a);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个题目看起来比实际复杂，alert的结果是1；这里依然有3个重要的概念需要我们知道。&lt;/p&gt;&#xD;
&lt;p&gt;首先，在题目1里我们知道了变量声明在进入执行上下文就完成了；第二个概念就是函数声明也是提前的，所有的函数声明都在执行代码之前都已经完成了声明，和变&lt;/p&gt;&#xD;
&lt;p&gt;量声明一样。澄清一下，函数声明是如下这样的代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; functionName(arg1, arg2){&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;函数体&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;如下不是函数，而是函数表达式，相当于变量赋值：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; functionName = &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;(arg1, arg2){&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;函数体&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;};&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;澄清一下，函数表达式没有提前，就相当于平时的变量赋值。&lt;/p&gt;&#xD;
&lt;p&gt;第三需要知道的是，函数声明会覆盖变量声明，但不会覆盖变量赋值，为了解释这个，我们来看一个例子：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; value(){&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; 1;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; value;&lt;br /&gt;alert(&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt; value);    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;"function"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;尽快变量声明在下面定义，但是变量value依然是function，也就是说这种情况下，函数声明的优先级高于变量声明的优先级，但如果该变量value赋值了，那结果就完全不一样了：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; value(){&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; 1;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; value = 1;&lt;br /&gt;alert(&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt; value);    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;"number"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;该value赋值以后，变量赋值初始化就覆盖了函数声明。&lt;/p&gt;&#xD;
&lt;p&gt;重新回到题目，这个函数其实是一个有名函数表达式，函数表达式不像函数声明一样可以覆盖变量声明，但你可以注意到，变量b是包含了该函数表达式，而该函数表达式的名字是a；不同的浏览器对a这个名词处理有点不一样，在IE里，会将a认为函数声明，所以它被变量初始化覆盖了，就是说如果调用a(--x)的话就会出错，而其它浏览器在允许在函数内部调用a(--x)，因为这时候a在函数外面依然是数字。基本上，IE里调用b(2)的时候会出错，但其它浏览器则返回undefined。&lt;/p&gt;&#xD;
&lt;p&gt;理解上述内容之后，该题目换成一个更准确和更容易理解的代码应该像这样：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a = 1,&lt;br /&gt;    b = &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;(x) {&lt;br /&gt;        x &amp;amp;&amp;amp; b(--x);&lt;br /&gt;    };&lt;br /&gt;alert(a);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这样的话，就很清晰地知道为什么alert的总是1了，详细内容请参考&lt;a href="http://www.cnblogs.com/TomXu/archive/2011/12/29/2290308.html" target="_blank"&gt;《深入理解JavaScript系列（2）：揭秘命名函数表达式》&lt;/a&gt;中的内容。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff6600;"&gt;大叔注：安装ECMAScript规范，作者对函数声明覆盖变量声明的解释其实不准确的，正确的理解应该是如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;进入执行上下文&lt;/strong&gt;： 这里出现了名字一样的情况，一个是函数申明，一个是变量申明。那么，根据&lt;a href="http://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html" target="_blank"&gt;深入理解JavaScript系列（12）：变量对象（Variable Object）&lt;/a&gt;介绍的，填充VO的顺序是: 函数的形参 -&amp;gt; 函数申明 -&amp;gt; 变量申明。&lt;br /&gt;上述例子中，变量a在函数a后面，那么，变量a遇到函数a怎么办呢？还是根据变量对象中介绍的，当变量申明遇到VO中已经有同名的时候，不会影响已经存在的属性。而函数表达式不会影响VO的内容，所以b只有在执行的时候才会触发里面的内容。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;题目3&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; a(x) {&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; x * 2;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; a;&lt;br /&gt;alert(a);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个题目就是题目2里的大叔加的注释了，也就是函数声明和变量声明的关系和影响，遇到同名的函数声明，VO不会重新定义，所以这时候全局的VO应该是如下这样的：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;VO(global) = {&lt;br /&gt;    a: 引用了函数声明&amp;ldquo;a&amp;rdquo;&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;而执行a的时候，相应地就弹出了函数a的内容了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;题目4&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; b(x, y, a) {&lt;br /&gt;    arguments[2] = 10;&lt;br /&gt;    alert(a);&lt;br /&gt;}&lt;br /&gt;b(1, 2, 3);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;关于这个题目，NC搬出了262-3的规范出来解释，其实从《&lt;a id="ctl02_lnkTitle" href="http://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html" target="_blank"&gt;深入理解JavaScript系列（12）：变量对象（Variable Object）&lt;/a&gt;》中的函数上下文中的变量对象一节就可以清楚地知道，活动对象是在进入函数上下文时刻被创建的，它通过函数的arguments属性初始化。arguments属性的值是Arguments对象：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;AO = {&lt;br /&gt;  arguments: &amp;lt;ArgO&amp;gt;&lt;br /&gt;};&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;Arguments对象是活动对象的一个属性，它包括如下属性：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;callee &amp;mdash; 指向当前函数的引用&lt;/li&gt;&#xD;
&lt;li&gt;length &amp;mdash; 真正传递的参数个数&lt;/li&gt;&#xD;
&lt;li&gt;properties-indexes (字符串类型的整数) 属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是&lt;strong&gt;&lt;span style="color: #ff6600;"&gt;共享&lt;/span&gt;&lt;/strong&gt;的。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;这个共享其实不是真正的共享一个内存地址，而是2个不同的内存地址，使用JavaScript引擎来保证2个值是随时一样的，当然这也有一个前提，那就是这个索引值要小于你传入的参数个数，也就是说如果你只传入2个参数，而还继续使用arguments[2]赋值的话，就会不一致，例如：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; b(x, y, a) {&lt;br /&gt;    arguments[2] = 10;&lt;br /&gt;    alert(a);&lt;br /&gt;}&lt;br /&gt;b(1, 2);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这时候因为没传递第三个参数a，所以赋值10以后，alert(a)的结果依然是undefined，而不是10，但如下代码弹出的结果依然是10，因为和a没有关系。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; b(x, y, a) {&lt;br /&gt;    arguments[2] = 10;&lt;br /&gt;    alert(arguments[2]);&lt;br /&gt;}&lt;br /&gt;b(1, 2);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;题目5&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; a() {&lt;br /&gt;    alert(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;a.call(&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个题目可以说是最简单的，也是最诡异的，因为如果没学到它的定义的话，打死也不会知道结果的，关于这个题目，我们先来了解2个概念。&lt;/p&gt;&#xD;
&lt;p&gt;首先，就是this值是如何定义的，当一个方法在对象上调用的时候，this就指向到了该对象上，例如：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; object = {&lt;br /&gt;    method: &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;() {&lt;br /&gt;        alert(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; === object);    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;true&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;}&lt;br /&gt;object.method(); &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;上面的代码，调用method()的时候this被指向到调用它的object对象上，但在全局作用域里，this是等价于window（浏览器中，非浏览器里等价于global），在如果一个function的定义不是属于一个对象属性的时候（也就是单独定义的函数），函数内部的this也是等价于window的，例如：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; method() {&lt;br /&gt;    alert(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; === window);    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;true&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;method(); &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;了解了上述概念之后，我们再来了解一下call()是做什么的，call方法作为一个function执行代表该方法可以让另外一个对象作为调用者来调用，call方法的第一个参数是对象调用者，随后的其它参数是要传给调用method的参数（如果声明了的话），例如：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; method() {&lt;br /&gt;    alert(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; === window);&lt;br /&gt;}&lt;br /&gt;method();    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;true&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;method.call(document);   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;false&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第一个依然是true没什么好说的，第二个传入的调用对象是document，自然不会等于window，所以弹出了false。&lt;/p&gt;&#xD;
&lt;p&gt;另外，根据ECMAScript262规范规定：如果第一个参数传入的对象调用者是null或者undefined的话，call方法将把全局对象（也就是window）作为this的值。所以，不管你什么时候传入null，其this都是全局对象window，所以该题目可以理解成如下代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; a() {&lt;br /&gt;    alert(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;a.call(window);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;所以弹出的结果是[object Window]就很容易理解了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这5个题目虽然貌似有点偏，但实际上考察的依然是基本概念，只有熟知了这些基本概念才能写出高质量代码。&lt;/p&gt;&#xD;
&lt;p&gt;关于JavaScript的基本核心内容和理解基本上在该系列就到此为止了，接下来的章节除了把五大原则剩余的2篇补全依然，会再加两篇关于DOM的文章，然后就开始转向整理关于JavaScript模式与设计模式相关的文章了（大概10篇左右），随后再会花几个章节来一个实战系列。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;更多题目&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果大家有兴趣，可以继续研究下面的一些题目，详细通过这些题目也可以再次加深对JavaScript基础核心特性的理解。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff6600;"&gt;大叔注：这些题目也是来自出这5个题目的人，当然如果你能答对4个及以上并且想拿高工资的话，请联系我。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;找出数字数组中最大的元素（使用Match.max函数）&lt;/li&gt;&#xD;
&lt;li&gt;转化一个数字数组为function数组（每个function都弹出相应的数字）&lt;/li&gt;&#xD;
&lt;li&gt;给object数组进行排序（排序条件是每个元素对象的属性个数）&lt;/li&gt;&#xD;
&lt;li&gt;利用JavaScript打印出Fibonacci数（不使用全局变量）&lt;/li&gt;&#xD;
&lt;li&gt;实现如下语法的功能：var a = (5).plus(3).minus(6); //2&lt;/li&gt;&#xD;
&lt;li&gt;实现如下语法的功能：var a = add(2)(3)(4); //9&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;同步与推荐&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文已同步至目录索引：&lt;span style="font-size: 14pt;"&gt;&lt;a href="http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html" target="_blank"&gt;深入理解JavaScript系列&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;深入理解JavaScript系列文章，包括了原创，翻译，转载等各类型的文章，如果对你有用，请推荐支持一把，给大叔写作的动力。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/TomXu/aggbug/2342098.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ourroad/archive/2012/02/10/lintclr.html</id><title type="text">Windows下创建XUL应用程序</title><summary type="text">一、基本概念 XUL是一个Mozilla使用XML来描述用户界面的一种技术，使用XUL你可以快速的创建出跨平台，基于因特网的应用程序。 XULRunner是一个由Mozilla基金会开发运行时环境，用来为XUL和XPCOM应用程序提供统一的后端运行环境。所有基于XUL的应用程序都是运行在XULRunner之上的，比如我们比较常用的Firefox和Thunderbird。 Gecko是套开放原始码的、以C++编写的网页排版引擎，目前为Mozilla家族网页浏览器以及Netscape 6以后版本浏览器所使用，XULRunner使用的也是它。二、搭建开发环境 1、XULRunner为XUL应用程序提</summary><published>2012-02-10T00:45:00Z</published><updated>2012-02-10T00:45:00Z</updated><author><name>lintclr</name><uri>http://www.cnblogs.com/ourroad/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ourroad/archive/2012/02/10/lintclr.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ourroad/archive/2012/02/10/lintclr.html"/><content type="html">&lt;p&gt;&lt;span style="background-color: #ffffff; font-size: 14pt;"&gt;&amp;nbsp;一、基本概念&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;XUL&amp;nbsp;是一个&lt;a href="http://www.mozilla.org/"&gt;Mozilla&lt;/a&gt;使用XML来描述用户界面的一种技术，使用XUL你可以快速的创建出跨平台，基于因特网的应用程序。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;XULRunner是一个由Mozilla基金会开发运行时环境，用来为XUL和XPCOM应用程序提供统一的后端运行环境。&lt;/span&gt;&lt;/span&gt;所有基于XUL的应用程序都是运行在XULRunner之上的，比如我们比较常用的Firefox和Thunderbird。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;Gecko是套开放原始码的、以C++编写的网页排版引擎，目前为Mozilla家族网页浏览器以及Netscape 6以后版本浏览器所使用，XULRunner使用的也是它。&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;二、搭建开发环境&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;1、XULRunner为XUL应用程序提供了后端运行环境，下载&lt;a href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/"&gt;XULRunner SDK&lt;/a&gt;，由于XULRunner自带Gecko引擎，因此不必再单独下载。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;本人下载的是XULRunner sdk 2.0 for windows版本，下面的开发主要以XULRunner sdk 2.0 for windows为主，如果下载的是XULRunner2.0以前的版本则下面的内容有的则需要修改。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;2、配置环境变量，这个可选只是为了方便，解压XULRunner sdk 2.0，添加xulrunner.exe所在的目录到环境变量，如：D:\xulrunner2.0\bin;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;三、手工创建XUL应用程序&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;1、创建XUL应用程序所需目录及文件，结构如下:&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;-HelloXUL&lt;br /&gt;           application.ini&lt;br /&gt;           chrome.manifest&lt;br /&gt;           -defaults&lt;br /&gt;               -preferences&lt;br /&gt;                    prefs.js&lt;br /&gt;           -chrome&lt;br /&gt;               -content&lt;br /&gt;                    HelloXUL.xul&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;2、编辑application.ini&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;application.ini中包含此应用程序的基本信息，Gecko的版本信息，也是应用程序启动的入口;HelloXUL的信息如下:&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[App]&lt;br /&gt;     Name=HelloXUL&lt;br /&gt;     ID=lintclr@&lt;span style="color: #800080;"&gt;126&lt;/span&gt;.com &lt;br /&gt;     Version=&lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;.&lt;span style="color: #800080;"&gt;0.0&lt;/span&gt;&lt;br /&gt;     BuildID=&lt;span style="color: #800080;"&gt;20120204&lt;/span&gt;&lt;br /&gt;     Vendor=&lt;br /&gt;     [Gecko]&lt;br /&gt;     MinVersion=&lt;span style="color: #800080;"&gt;1.8&lt;/span&gt;&lt;br /&gt;     MaxVersion=&lt;span style="color: #800080;"&gt;2.0&lt;/span&gt;.&lt;span style="color: #800080;"&gt;0&lt;/span&gt;.*&lt;br /&gt;     [XRE]&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;3、编辑chrome.manifest&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;chrome.manifest包含XUL应用程序的组织结构;HelloXUL的信息如下：&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;content&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HelloXUL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chrome/content/&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;具体其他选项参照：&lt;a href="https://developer.mozilla.org/en/Chrome_Registration"&gt;https://developer.mozilla.org/en/Chrome_Registration&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;4、编辑prefs.js&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 此文件主要包括应用程序的配置信息;HelloXUL配置如下：&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;pref("toolkit.defaultChromeURI", "chrome://HelloXUL/content/HelloXUL.xul");&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt; debugging prefs &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;br /&gt;pref("browser.dom.window.dump.enabled", &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;pref("javascript.options.showInConsole", &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;pref("javascript.options.strict", &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;pref("nglayout.debug.disable_xul_cache", &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;pref("nglayout.debug.disable_xul_fastload", &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt; added to allow &amp;lt;label  ... /&amp;gt; to work &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;br /&gt;pref("network.protocol-handler.expose.http", &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;pref("network.protocol-handler.warn-external.http", &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;5、编辑HelloXUL.xul&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;以下代码创建一个窗口，一个按钮，点击按钮弹出提示框，显示HelloXUL。&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;xml version="1.0"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;xml-stylesheet href="chrome://global/skin/" type="text/css"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;window &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="width: 500px; height: 300px;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;hbox&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;button &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;label&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="HelloXUL"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; oncommand&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="alert('HelloXUL')"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;hbox&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;window&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;6、运行应用程序&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;进入应用程序主目录即HelloXUL目录，输入：xulrunner application.ini，然后回车，第一个应用程序成功运行。&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;四、使用IDE工具创建XUL应用程序&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;1、下载最新版&lt;a href="https://developer.mozilla.org/en/XUL_Explorer"&gt;XUL Explorer&lt;/a&gt;工具&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp;2、双击安装程序,按照步骤依次安装，安装成功后运行XUL Explorer，按照以下步骤创建应用程序:&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img style="border-style: initial; border-color: initial;" src="http://pic002.cnblogs.com/images/2012/339657/2012020916315712.png" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/339657/2012020916334328.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/339657/2012020916343322.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/339657/2012020916350557.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="color: #e30000;"&gt;&amp;nbsp;注：由于我们XULRunner版本为2.0故，此处最大版本改为2.0.0.*;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/339657/2012020916354145.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/339657/2012020916360350.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;点击Finish完成。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; 3、进入创建应用程序目录可以看到和我们手工创建的应用程序结构一样，用上面一样的方法运行，程序成功运行。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; 4、如果创建时发生&lt;span&gt;&lt;span style="color: #de5700;"&gt;"0x80004002 (NS_NOINTERFACE)"&lt;/span&gt;错误进行以下操作：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; (1)&lt;/span&gt;&lt;span&gt;将 XUL Explorer 中 chrome 目录下的 en-US.jar 解压，目录名为&amp;ldquo;en-US&amp;rdquo;，其中的目录层次要和en-US.jar中的完全一致。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; (2)修改 en-US.manifest 文件，将&amp;nbsp;locale explorer en-US jar:en-US.jar!/&amp;nbsp;改为 locale explorer en-US file:en-US/&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;五、应用程序实现双击运行&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&amp;nbsp; 1、在应用程序根目录创建xulrunner目录，将xulrunner sdk中bin目录里的内容复制到该目录。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp; 2、将xulrunner目录中的xulrunner-stub.exe和mozcrt19.dll复制到应用程序的根目录，双击xulrunner-stub.exe应用程序成功运行。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ourroad/aggbug/2344134.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ourroad/archive/2012/02/10/lintclr.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/west-link/archive/2012/02/10/2344783.html</id><title type="text">高效程序员秘籍（10）：聚合个人全部邮箱</title><summary type="text">对于有很多个邮箱的人来说，查看是否有新邮件是件挺烦琐的事情，尤其是拥有各种不同网站的邮箱，需要分别登录各个邮箱进行。如果有可以集中查看所有邮箱中新邮件的方法就方便多了，下面就向大家介绍两种方法。 第一种方法是挑选一个邮箱作为聚合邮箱，用来接收其他邮箱的新邮件，也可以在该邮箱中以其他邮箱作为发送地址。建议把Gmail邮箱作为聚合邮箱，或者其他功能比较强大的Web邮箱，使用Web邮箱的好处是随时随地都可以收发邮件，只要有一个包含浏览器的终端设备即可。把新邮件自动转发到聚合邮箱的过程很简单，只需要在邮箱设置的自动转发选项中输入聚合邮箱即可，随后聚合邮箱会收到一封自动转发确认邮件，点击邮件内容中提供.</summary><published>2012-02-10T00:33:00Z</published><updated>2012-02-10T00:33:00Z</updated><author><name>West_Link</name><uri>http://www.cnblogs.com/west-link/</uri></author><link rel="alternate" href="http://www.cnblogs.com/west-link/archive/2012/02/10/2344783.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/west-link/archive/2012/02/10/2344783.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; 对于有很多个邮箱的人来说，查看是否有新邮件是件挺烦琐的事情，尤其是拥有各种不同网站的邮箱，需要分别登录各个邮箱进行。如果有可以集中查看所有邮箱中新邮件的方法就方便多了，下面就向大家介绍两种方法。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; 第一种方法是挑选一个邮箱作为聚合邮箱，用来接收其他邮箱的新邮件，也可以在该邮箱中以其他邮箱作为发送地址。建议把Gmail邮箱作为聚合邮箱，或者其他功能比较强大的Web邮箱，使用Web邮箱的好处是随时随地都可以收发邮件，只要有一个包含浏览器的终端设备即可。把新邮件自动转发到聚合邮箱的过程很简单，只需要在邮箱设置的自动转发选项中输入聚合邮箱即可，随后聚合邮箱会收到一封自动转发确认邮件，点击邮件内容中提供的验证链接完成验证，到此为止，一个邮箱的新邮件自动转发到聚合邮箱就完成了。类似Forxmail、Outlook等邮箱都有新邮件到达的通知和提示功能，其实基于Web的邮箱也能做到，不过需要做一些额外的工作。大部分浏览器都有新邮件提示器插件，例如火狐中有WebMail Notifier，360浏览器中有邮件app，但是在聚合邮箱中想用其他邮箱帐号回复某个邮件就只能登录该邮箱了，不过有的邮箱客户端支持多个邮件发送地址，比如Gmail支持多个邮件发送地址，在发邮件时可以选择用哪个邮箱发送。在Gmail中增加邮件发送账户的方法：进入邮箱设置，选择&amp;ldquo;账户和导入&amp;rdquo;选项卡，点击&amp;ldquo;用这个地址发送邮件&amp;rdquo;右边的超链接，即&amp;ldquo;添加您拥有的其他电子邮件地址&amp;rdquo;，浏览器会弹出一个对话框，在其中的输入框中填写要作为发送地址的邮箱，按照提示继续即可，以后在聚合邮箱中收到来自该邮箱的新邮件，回复邮件时的发送地址默认就是该邮箱。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; 第二种方法是使用Pop peeper。Pop peeper是一款小巧的邮件检测利器，支持各种各样的提醒方式，可绑定任意多个邮箱帐号，可以把它作为一款简单实用的邮件客户端，也可以和已有的邮件客户端（如Outlook）关联。主界面如下图所示：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/306618/2012021008250543.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; 首先要做的就是把帐号导入Pop peeper，它支持自动添加，单击左下角的添加按钮，可以选择导入帐号或者添加单个帐号，当选择导入帐号后POP Peeper程序会自动将本机中的OutLook中或者其他邮件客户端中的已有帐号全部显示出来，在需要导入的邮件帐号前面打上勾号，然后单击&amp;ldquo;完成&amp;rdquo;按钮，然后分别输入对应各个帐号的邮件访问密码，最后单击密码输入框中的更新按钮，就能将被选中的邮件帐号全部添加到POP Peeper程序中了。如果选择手动添加帐号的话，在随后弹出的向导窗口中，依次输入电子邮件地址、帐号名称、登录邮件服务器的名称与密码、邮件收发服务器的IP地址等信息，最后单击&amp;ldquo;完成&amp;rdquo;按钮，结束帐号创建工作。Gmail帐号的导入可能需要额外的工作，具体可参见官方网站的说明：&lt;a href="http://www.poppeeper.com/faq.php"&gt;http://www.poppeeper.com/faq.php&lt;/a&gt;。以下是Pop peeper所支持的提醒方式：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;1、语音提醒，可以自定义语音。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;2、托盘图标通知，显示每个帐户的新邮件数量。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;3、闪烁的滚动锁定指示灯&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;4、Windows弹出窗口中显示收到新电子邮件的帐户&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;5、气球提示显示收到的最后一封电子邮件消息的主题和发件人&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;6、自动打开Pop peeper或启动电子邮件客户端&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;7、自动朗读收到的邮件（需要下载插件）&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;8、启动屏幕保护程序，在其中显示收到新邮件的账户和邮件数量（需要下载插件）&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px;"&gt;9、不间断地语音提示，直到得到用户的确认（需要下载插件）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; 使用邮箱聚合的方式后，基本上就只需要登录聚合邮箱进行操作了，可以节约不少时间，园友们不妨尝试一下。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/west-link/aggbug/2344783.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/west-link/archive/2012/02/10/2344783.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/clark159/archive/2012/02/10/2344779.html</id><title type="text">[Architecture Pattern] Singleton Pool 模式</title><summary type="text">动机 :在开发与数据库沟通的系统时，因为建立数据库联机是比较昂贵的。 所以ADO.NET在背后，帮开发人员实做了 ConnectionPool的机制。 将系统内建立的数据库联机做快取， 当系统要使用时就直接使用快取联机，避免了每次都建立新数据库联机的花费。实际上在使用ADO.NET时，开发人员对于背后的ConnectionPool机制其实是无感的。 要让开发人员无感，可是又能完成快取的功能，这真的要花一点工夫去设计。本文介绍一个『Singleton Pool模式』。 定义对象之间的职责跟互动，用来建置类似ConnectionPool功能的对象池功能，并且提供开发人员无感的使用界面。 为自己做个</summary><published>2012-02-10T00:04:00Z</published><updated>2012-02-10T00:04:00Z</updated><author><name>Clark159</name><uri>http://www.cnblogs.com/clark159/</uri></author><link rel="alternate" href="http://www.cnblogs.com/clark159/archive/2012/02/10/2344779.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/clark159/archive/2012/02/10/2344779.html"/><content type="html">&lt;p&gt;&lt;span style="color: #0000ff; font-size: medium;"&gt;&lt;strong&gt;动机 :&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在开发与数据库沟通的系统时，因为建立数据库联机是比较昂贵的。&lt;br /&gt; 所以ADO.NET在背后，帮开发人员实做了 ConnectionPool的机制。&lt;br /&gt; 将系统内建立的数据库联机做快取，&lt;br /&gt; 当系统要使用时就直接使用快取联机，避免了每次都建立新数据库联机的花费。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;实际上在使用ADO.NET时，开发人员对于背后的ConnectionPool机制其实是无感的。&lt;br /&gt; 要让开发人员无感，可是又能完成快取的功能，这真的要花一点工夫去设计。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文介绍一个『Singleton Pool模式』。&lt;br /&gt; 定义对象之间的职责跟互动，用来建置类似ConnectionPool功能的对象池功能，并且提供开发人员无感的使用界面。&lt;br /&gt; 为自己做个纪录，也希望能帮助到有需要的开发人员。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #0000ff; font-size: medium;"&gt;&lt;strong&gt;结构 :&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;『Singleton Pool模式』是Flyweight Pattern的延伸，有兴趣的开发人员可以找相关文章做参考。&lt;br /&gt; 模式的结构如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/201221074455358.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/201221074455358.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;主要的参与者有：&lt;br /&gt; NativeConnection&lt;br /&gt; -实际提供功能的对象。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ReferenceRecord&lt;br /&gt; -快取NativeConnection，并且纪录有多少客户端正在使用中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ConnectionPool&lt;br /&gt; -建立ReferenceRecord用来快取对象及记录使用者。&lt;br /&gt; -当有人要使用NativeConnection，可是系统内没有快取的时候，建构快取。&lt;br /&gt; -当有人要使用NativeConnection，可是系统内已有快取的时候，回传快取。&lt;br /&gt; -当没有人使用NativeConnection，可是系统内已有快取的时候，解构快取。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Connection&lt;br /&gt; -合成NativeConnection功能提供外部使用。&lt;br /&gt; -将NativeConnection的建构、解构，交由ConnectionPool去处理。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;透过下面的图片说明，可以了解相关对象之间的互动流程。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/201221074757875.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/201221074757875.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/201221074933436.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/201221074933436.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/20122107495065.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/20122107495065.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/20122107504872.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/20122107504872.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #0000ff; font-size: medium;"&gt;&lt;strong&gt;实做 :&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;范列下载 :&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;范例的程序代码较多，实做说明请参照范例程序内容。&lt;br /&gt; &lt;a href="http://Files.Dotblogs.com.tw/clark/1202/201221075034706.zip"&gt;SingletonPoolSample点此下载&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;范列实做 :&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;范例内容实做一个模拟的ConnectionPool，它会快取实际联机到数据库的对象，并且会将内部执行讯息打印到Console上。&lt;br /&gt; 透过这个范例，可以清楚的了解如何实做以及执行效果。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;首先在项目里实做一个虚拟的NativeConnection，用来仿真实际联机到数据库的功能以及将执行讯息打印到Console上。&lt;/p&gt;&#xD;
&lt;pre &gt;public class NativeConnection : IDisposable&#xD;
{&#xD;
    // Fields&#xD;
    private readonly string _connectionString = null;&#xD;
&#xD;
&#xD;
    // Constructor&#xD;
    public NativeConnection(string connectionString)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (string.IsNullOrEmpty(connectionString) == true) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
        _connectionString = connectionString;&#xD;
        Console.WriteLine(string.Format("Connect to database.[{0}]", _connectionString));&#xD;
    }&#xD;
&#xD;
    public void Dispose()&#xD;
    {&#xD;
        Console.WriteLine(string.Format("Disconnection to database.[{0}]", _connectionString));&#xD;
    }&#xD;
&#xD;
&#xD;
    // Methods  &#xD;
    public void Query()&#xD;
    {&#xD;
        Console.WriteLine(string.Format("Query.[{0}]", _connectionString));&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;再来建立ReferenceRecord，用来快取NativeConnection，并且纪录谁使用了NativeConnection。&lt;/p&gt;&#xD;
&lt;pre &gt;internal sealed class ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt;&#xD;
{&#xD;
    // Fields&#xD;
    private readonly List&amp;lt;Guid&amp;gt; _consumerIdList = new List&amp;lt;Guid&amp;gt;();&#xD;
&#xD;
&#xD;
    // Constructor&#xD;
    public ReferenceRecord(TReferenceKey referenceKey, TReferenceItem referenceItem)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (referenceKey == null) throw new ArgumentNullException();&#xD;
        if (referenceItem == null) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
        this.ReferenceKey = referenceKey;&#xD;
        this.ReferenceItem = referenceItem;&#xD;
    }&#xD;
&#xD;
&#xD;
    // Properties&#xD;
    public TReferenceKey ReferenceKey { get; private set; }&#xD;
&#xD;
    public TReferenceItem ReferenceItem { get; private set; }&#xD;
&#xD;
&#xD;
    // Methods   &#xD;
    public void Register(Guid consumerId)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (consumerId == Guid.Empty) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
        if (_consumerIdList.Contains(consumerId) == false)&#xD;
        {&#xD;
            _consumerIdList.Add(consumerId);&#xD;
        }&#xD;
    }&#xD;
&#xD;
    public void Unregister(Guid consumerId)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (consumerId == Guid.Empty) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
        if (_consumerIdList.Contains(consumerId) == true)&#xD;
        {&#xD;
            _consumerIdList.Remove(consumerId);&#xD;
        }&#xD;
    }&#xD;
&#xD;
    public bool NoConsumerRegistered()&#xD;
    {&#xD;
        if (_consumerIdList.Count &amp;lt;= 0)&#xD;
        {&#xD;
            return true;&#xD;
        }&#xD;
        return false;&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接着实做ConnectionPool，用来将整个『Singleton Pool模式』的流程做封装。&lt;/p&gt;&#xD;
&lt;pre &gt;public abstract class ReferencePool&amp;lt;TReferenceKey, TReferenceItem&amp;gt;&#xD;
{&#xD;
    // Fields&#xD;
    private readonly List&amp;lt;ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt;&amp;gt; _referenceRecordCollection = new List&amp;lt;ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt;&amp;gt;();&#xD;
&#xD;
&#xD;
    // Methods   &#xD;
    public virtual TReferenceItem Create(Guid consumerId, TReferenceKey referenceKey)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (consumerId == Guid.Empty) throw new ArgumentNullException();&#xD;
        if (referenceKey == null) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion     &#xD;
      &#xD;
        // Return Existing ReferenceItem&#xD;
        foreach (ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt; referenceRecord in _referenceRecordCollection)&#xD;
        {&#xD;
            if (this.CompareReferenceKey(referenceKey, referenceRecord.ReferenceKey) == true)&#xD;
            {&#xD;
                referenceRecord.Register(consumerId);&#xD;
                return referenceRecord.ReferenceItem;&#xD;
            }                &#xD;
        }&#xD;
&#xD;
        // Return New  ReferenceItem&#xD;
        TReferenceItem referenceItem = this.CreateReferenceItem(referenceKey);&#xD;
        if (referenceItem == null) throw new InvalidOperationException("CreateReferenceItem failed.");&#xD;
&#xD;
        ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt; newReferenceRecord = new ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt;(referenceKey, referenceItem);            &#xD;
        _referenceRecordCollection.Add(newReferenceRecord);&#xD;
        newReferenceRecord.Register(consumerId);&#xD;
&#xD;
        return referenceItem;&#xD;
    }&#xD;
&#xD;
    public virtual void Release(Guid consumerId, TReferenceKey referenceKey)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (consumerId == Guid.Empty) throw new ArgumentNullException();&#xD;
        if (referenceKey == null) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
&#xD;
        // Release Existing ReferenceItem&#xD;
        ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt; existingReferenceRecord = null;&#xD;
        foreach (ReferenceRecord&amp;lt;TReferenceKey, TReferenceItem&amp;gt; referenceRecord in _referenceRecordCollection)&#xD;
        {&#xD;
            if (this.CompareReferenceKey(referenceKey, referenceRecord.ReferenceKey) == true)&#xD;
            {&#xD;
                existingReferenceRecord = referenceRecord;&#xD;
                break;&#xD;
            }&#xD;
        }&#xD;
&#xD;
        if (existingReferenceRecord != null)&#xD;
        {&#xD;
            existingReferenceRecord.Unregister(consumerId);&#xD;
            if (existingReferenceRecord.NoConsumerRegistered() == true)&#xD;
            {&#xD;
                _referenceRecordCollection.Remove(existingReferenceRecord);&#xD;
                this.ReleaseReferenceItem(existingReferenceRecord.ReferenceItem);                    &#xD;
            }&#xD;
        }&#xD;
    }&#xD;
&#xD;
&#xD;
    protected abstract TReferenceItem CreateReferenceItem(TReferenceKey referenceKey);&#xD;
&#xD;
    protected abstract void ReleaseReferenceItem(TReferenceItem referenceItem);&#xD;
&#xD;
    protected abstract bool CompareReferenceKey(TReferenceKey referenceKeyA, TReferenceKey referenceKeyB);&#xD;
}&#xD;
&#xD;
public class ConnectionPool : ReferencePool&amp;lt;string, NativeConnection&amp;gt;&#xD;
{&#xD;
    // Methods  &#xD;
    protected override NativeConnection CreateReferenceItem(string connectionString)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (string.IsNullOrEmpty(connectionString) == true) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
        return new NativeConnection(connectionString);&#xD;
    }&#xD;
&#xD;
    protected override void ReleaseReferenceItem(NativeConnection connection)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (connection == null) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion     &#xD;
        connection.Dispose();&#xD;
    }&#xD;
&#xD;
    protected override bool CompareReferenceKey(string connectionStringA, string connectionStringB)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (string.IsNullOrEmpty(connectionStringA) == true) throw new ArgumentNullException();&#xD;
        if (string.IsNullOrEmpty(connectionStringB) == true) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
        return connectionStringA == connectionStringB;&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;剩下就是Connection了，这个对象合成NativeConnection对象提供外部使用。并且在建构、解构的函式内，调用Singleton的ConnectionPool，来完成『Singleton Pool模式』的功能。&lt;/p&gt;&#xD;
&lt;pre &gt;public class Connection : IDisposable&#xD;
{&#xD;
    // Singleton&#xD;
    private static ConnectionPool _poolInstance = null;&#xD;
&#xD;
    private static ConnectionPool PoolInstance&#xD;
    {&#xD;
        get&#xD;
        {&#xD;
            if (_poolInstance == null)&#xD;
            {&#xD;
                _poolInstance = new ConnectionPool();&#xD;
            }&#xD;
            return _poolInstance;&#xD;
        }&#xD;
    }&#xD;
&#xD;
&#xD;
    // Fields&#xD;
    private readonly Guid _consumerId = Guid.Empty;&#xD;
&#xD;
    private readonly string _connectionString = null;&#xD;
&#xD;
    private readonly ConnectionPool _connectionPool = null;&#xD;
&#xD;
    private readonly NativeConnection _nativeConnection = null;        &#xD;
&#xD;
&#xD;
    // Constructor&#xD;
    public Connection(string connectionString) : this(connectionString, Connection.PoolInstance) { }&#xD;
&#xD;
    public Connection(string connectionString, ConnectionPool connectionPool)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (string.IsNullOrEmpty(connectionString) == true) throw new ArgumentNullException();&#xD;
        if (connectionPool == null) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion&#xD;
&#xD;
        // Arguments&#xD;
        _consumerId = Guid.NewGuid();&#xD;
        _connectionString = connectionString;&#xD;
        _connectionPool = connectionPool;&#xD;
&#xD;
        // Create&#xD;
        _nativeConnection = _connectionPool.Create(_consumerId, _connectionString);&#xD;
        if (_nativeConnection == null) throw new InvalidOperationException("Create NativeConnection failed.");&#xD;
    }&#xD;
&#xD;
    public void Dispose()&#xD;
    {&#xD;
        // Release&#xD;
        _connectionPool.Release(_consumerId, _connectionString);&#xD;
    }&#xD;
&#xD;
&#xD;
    // Methods  &#xD;
    public void Query()&#xD;
    {&#xD;
        // Query&#xD;
        _nativeConnection.Query();&#xD;
    }        &#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最后我们加上测试的程序以及执行的结果。&lt;br /&gt; 由程序代码可以看到，虽然建立了三个Connection来使用，&lt;br /&gt; 可是因为对象套用『Singleton Pool模式』的缘故，NativeConnection的建构、解构是依照ConnectionString的数量(两个)来执行。&lt;/p&gt;&#xD;
&lt;pre &gt;class Program&#xD;
{&#xD;
    static void Main(string[] args)&#xD;
    {&#xD;
        Connection connectionA = new Connection("XXX Database");&#xD;
        Connection connectionB = new Connection("YYY Database");&#xD;
        Connection connectionC = new Connection("XXX Database");&#xD;
&#xD;
        connectionA.Query();&#xD;
        connectionB.Query();&#xD;
        connectionC.Query();&#xD;
&#xD;
        connectionA.Dispose();&#xD;
        connectionB.Dispose();&#xD;
        connectionC.Dispose();&#xD;
&#xD;
        Console.ReadLine();&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/201221075213328.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/201221075213328.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #0000ff; font-size: medium;"&gt;&lt;strong&gt;后记 :&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果在一些不大适合使用Singleton的系统内，也可以采用下列的模式。&lt;br /&gt; 增加一个ConnectionManager，来套用『Singleton Pool模式』的功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://Files.Dotblogs.com.tw/clark/1202/201221075127635.jpg" rel="lightbox"&gt;&lt;img src="http://Files.Dotblogs.com.tw/clark/1202/201221075127635.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;public class ConnectionManager&#xD;
{&#xD;
    // Fields&#xD;
    private readonly ConnectionPool _connectionPool = new ConnectionPool();&#xD;
&#xD;
&#xD;
    // Methods   &#xD;
    public Connection Create(string connectionString)&#xD;
    {&#xD;
        #region Require&#xD;
&#xD;
        if (string.IsNullOrEmpty(connectionString) == true) throw new ArgumentNullException();&#xD;
&#xD;
        #endregion            &#xD;
        return new Connection(connectionString, _connectionPool);&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;pre &gt;class Program&#xD;
{&#xD;
    static void Main(string[] args)&#xD;
    {&#xD;
        ConnectionManager connectionManager = new ConnectionManager();&#xD;
&#xD;
        Connection connectionA = connectionManager.Create("XXX Database");&#xD;
        Connection connectionB = connectionManager.Create("YYY Database");&#xD;
        Connection connectionC = connectionManager.Create("XXX Database");&#xD;
&#xD;
        connectionA.Query();&#xD;
        connectionB.Query();&#xD;
        connectionC.Query();&#xD;
&#xD;
        connectionA.Dispose();&#xD;
        connectionB.Dispose();&#xD;
        connectionC.Dispose();&#xD;
&#xD;
        Console.ReadLine();&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/clark159/aggbug/2344779.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/clark159/archive/2012/02/10/2344779.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html</id><title type="text">淘宝API开发系列---淘宝API的测试及使用2</title><summary type="text">继续前面一篇随笔《淘宝API开发系列---淘宝API的测试及使用》，来继续介绍淘宝API的具体代码开发部分，上篇主要是介绍淘宝SDK开发的一些流程及必备的信息，以及掌握如何学会利用API文档、淘宝API测试工具来获取我们所需的数据，其中我一般倾向于获取Json数据，然后进行分析，其中Json数据可以通过JsonView工具（http://jsonviewer.codeplex.com/）进行格式化显示，方便我们了解和区分各个属性的信息。另外淘宝的SDK里面，封装了很多对象，我们通过数据就可以获取到相关的信息了，不过注意的就是，我们每个接口调用，都要传入Fields的属性，如果我们没有指定相应的属性字段，那么接口返回的数据，就没有这项的，淘宝SDK的对象属性就会为空。</summary><published>2012-02-09T23:36:00Z</published><updated>2012-02-09T23:36:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html"/><content type="html">&lt;p&gt;继续前面一篇随笔《&lt;span  style="font-family: verdana, Arial, Helvetica, sans-serif; line-height: 18px; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html" target="_blank" style="color: red; font-size: 14px; font-weight: bold; text-decoration: underline; "&gt;&lt;span&gt;淘宝API开发系列---淘宝API的测试及使用&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;》，来继续介绍淘宝API的具体代码开发部分，上篇主要是介绍淘宝SDK开发的一些流程及必备的信息，以及掌握如何学会利用API文档、淘宝API测试工具来获取我们所需的数据，其中我一般倾向于获取Json数据，然后进行分析，其中Json数据可以通过JsonView工具（&lt;a href="http://jsonviewer.codeplex.com/"&gt;http://jsonviewer.codeplex.com/&lt;/a&gt;）进行格式化显示，方便我们了解和区分各个属性的信息。另外淘宝的SDK里面，封装了很多对象，我们通过数据就可以获取到相关的信息了，不过注意的就是，我们每个接口调用，都要传入Fields的属性，如果我们没有指定相应的属性字段，那么接口返回的数据，就没有这项的，淘宝SDK的对象属性就会为空。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoJsonData.png" width="712" height="580" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;通过以上的工具，我们就能可视化属性的信息了，对接口数据的理解就更加清晰，首先我们来看看我测试例子的运行效果如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoSDKSample.png" width="952" height="471" alt="" /&gt;&lt;/p&gt;&lt;p&gt;其中上面例子的代码如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestUserGet()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;单独用户的信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;单独用户的信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;UserGetRequest();&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;实例化具体API对应的Request类&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;user_id,nick,created,buyer_credit,type,sex&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Nick&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;wuhuacong&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserGetResponse&amp;nbsp;rsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;执行API请求并将该类转换为response对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(rsp.Body);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(rsp.User&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(rsp.User.Nick);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(ObjectToString(rsp.User));&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;User&amp;gt;&amp;nbsp;list&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;User&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(rsp.User);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestItemGet()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;单独商品的信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;单独商品的信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;ItemGetRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;num_iid,title,nick,pic_path,cid,price,type,location.city,delist_time,post_fee&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.NumIid&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;3838293428L&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemGetResponse&amp;nbsp;itemRsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(itemRsp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;itemRsp.Item&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(itemRsp.Item.Nick);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(ObjectToString(itemRsp.Item));&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;Item&amp;gt;&amp;nbsp;list&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;Item&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(itemRsp.Item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestItemSearch()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;查询商品信息（不含类别）&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;查询商品信息（不含类别）&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemsGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;ItemsGetRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;num_iid,title,nick,pic_url,cid,price,type,delist_time,post_fee,score,volume&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;,location.city,location.state";&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Q&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;笔记本&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;itemReq.Cid&amp;nbsp;=&amp;nbsp;"14";&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.OrderBy&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;volume:desc&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageNo&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageSize&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;40&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;显示列表信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemsGetResponse&amp;nbsp;itemRsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(itemRsp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(itemRsp.TotalResults);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;foreach&amp;nbsp;(Item&amp;nbsp;item&amp;nbsp;in&amp;nbsp;itemRsp.Items)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(ObjectToString(item));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;itemRsp.Items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于需要获取用户私密信息，如买入卖出等重要信息，还需要获取用户的SessionKey的，我们可以通过下面接口函数，弹出登录窗口，然后登录后，定位到对应的App应用页面，然后页面加载的时候，获取到对应的SessionKey、&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/login.png" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/GetSessionKey.png" width="585" height="485" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;判断是否顺利获取SessionKey&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;GetAuthorizeCode(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;appKey)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;authorizeCode&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FrmAuthorized&amp;nbsp;dlg&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;FrmAuthorized();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dlg.AppKey&amp;nbsp;=&amp;nbsp;appkey;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(dlg.ShowDialog()&amp;nbsp;==&amp;nbsp;DialogResult.OK)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;authorizeCode&amp;nbsp;=&amp;nbsp;dlg.AuthrizeCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.IsNullOrEmpty(authorizeCode))&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sessionKeyUrl&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(TOP_AUTH_URL,&amp;nbsp;authorizeCode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpHelper&amp;nbsp;helper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;HttpHelper();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;html&amp;nbsp;=&amp;nbsp;helper.GetHtml(sessionKeyUrl);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;格式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;top_appkey=1142&amp;amp;top_parameters=xxx&amp;amp;top_session=xxx&amp;amp;top_sign=xxx&amp;amp;encode=utf-8&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;reg&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.*?&amp;amp;top_session=(?&amp;lt;session&amp;gt;.*?)&amp;amp;top_sign&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sessionKey&amp;nbsp;=&amp;nbsp;CRegex.GetText(html,&amp;nbsp;reg,&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;sessionKey;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后我们看看其中获取已买记录的接口实现如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestBuyInfo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.IsNullOrEmpty(sessionKey))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sessionKey&amp;nbsp;=&amp;nbsp;GetAuthorizeCode(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.appkey);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;买入交易&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;买入交易&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TradesBoughtGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;TradesBoughtGetRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;req.Fields&amp;nbsp;=&amp;nbsp;"tid,title,price,type,num_iid,seller_nick,buyer_nick,status";&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tid,title,price,type,num_iid,seller_nick,buyer_nick,status,receiver_state,receiver_city,receiver_district,receiver_address&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageNo&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;1L&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageSize&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;40L&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TradesBoughtGetResponse&amp;nbsp;rsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req,&amp;nbsp;sessionKey);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(rsp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(rsp.Trades.Count);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;if&amp;nbsp;(rsp.Trades.Count&amp;nbsp;&amp;gt;&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(Trade&amp;nbsp;item&amp;nbsp;in&amp;nbsp;rsp.Trades)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(ObjectToString(item));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;rsp.Trades;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以上利用了我的Winform分页控件进行数据展示，因此代码要简化一些，当然，也可以用DataGridView来进行数据显示，不过代码方面可能要多一些。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2344722.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiaoyao2011/archive/2012/02/10/20-inspiring-examples-of-colorful-web-designs.html</id><title type="text">20丰富多彩的网页设计的灵感</title><summary type="text">我们将向您展示如何用颜色带给你一个很好的和个人的风格设计。由小细节和丰富多彩的排版完全丰富多彩的背景，有很多不同的颜色来启发你的灵感The NeighbourhoodShelton FlemingCaptain DashDangers of Fracking10 years in typeBrooks – Shoe AdvisorShoppub原文：http://webdesignledger.com/inspiration/20-inspiring-examples-of-colorful-web-designsLife in my Shoesespacio creativoMacquari</summary><published>2012-02-09T23:35:00Z</published><updated>2012-02-09T23:35:00Z</updated><author><name>孟晨</name><uri>http://www.cnblogs.com/xiaoyao2011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiaoyao2011/archive/2012/02/10/20-inspiring-examples-of-colorful-web-designs.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiaoyao2011/archive/2012/02/10/20-inspiring-examples-of-colorful-web-designs.html"/><content type="html">&lt;p&gt;&lt;span&gt;&lt;span&gt;我们将向您展示如何用颜色带给你一个很好的和个人的风格设计。&lt;/span&gt;&lt;span &gt;由小细节和丰富多彩的排版完全丰富多彩的背景，有很多不同的颜色来启发你的灵感&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.the-neighbourhood.com/" target="_blank"&gt;The Neighbourhood&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.the-neighbourhood.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful01.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.sheltonfleming.co.uk/" target="_blank"&gt;Shelton Fleming&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.sheltonfleming.co.uk/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful02.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://captaindash.com/" target="_blank"&gt;Captain Dash&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://captaindash.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful03.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dangersoffracking.com/" target="_blank"&gt;Dangers of Fracking&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.dangersoffracking.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful04.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.10yearsintype.com/" target="_blank"&gt;10 years in type&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.10yearsintype.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful05.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.brooksrunning.com/on/demandware.static/Sites-BrooksRunning-Site/Sites-BrooksRunning-Library/default/brooks_shoe_advisor/Default.htm" target="_blank"&gt;Brooks &amp;ndash; Shoe Advisor&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.brooksrunning.com/on/demandware.static/Sites-BrooksRunning-Site/Sites-BrooksRunning-Library/default/brooks_shoe_advisor/Default.htm"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful06.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.shoppub.com.br/" target="_blank"&gt;Shoppub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.shoppub.com.br/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful07.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;原文：&lt;a href="http://webdesignledger.com/inspiration/20-inspiring-examples-of-colorful-web-designs"&gt;http://webdesignledger.com/inspiration/20-inspiring-examples-of-colorful-web-designs&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://lifeinmyshoes.org/" target="_blank"&gt;Life in my Shoes&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://lifeinmyshoes.org/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful08.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.estudioec.com/" target="_blank"&gt;espacio creativo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.estudioec.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful09.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mq.edu.au/sustainability/greencampusguide/" target="_blank"&gt;Macquarie University &amp;ndash; Green Campus&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.mq.edu.au/sustainability/greencampusguide/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful10.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.lamaddalena.pl/" target="_blank"&gt;La Maddalena&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.lamaddalena.pl/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful11.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kinetic.com.sg/main.html" target="_blank"&gt;Kinetic&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.kinetic.com.sg/main.html"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful12.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.pioneer-steez.com/eu/en/" target="_blank"&gt;Pioneer Steez&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.pioneer-steez.com/eu/en/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful13.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://smallstudio.com.au/" target="_blank"&gt;small studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://smallstudio.com.au/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful14.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.apbaxter.com/" target="_blank"&gt;Adrian Baxter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.apbaxter.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful15.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.gimmedelivery.com/" target="_blank"&gt;Gimme&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.gimmedelivery.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful16.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.nikevision.com/" target="_blank"&gt;Nike Vision&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.nikevision.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful17.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.formfett.net/" target="_blank"&gt;Formfett&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.formfett.net/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful18.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.foundrycollective.com/" target="_blank"&gt;Foundry Collective&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.foundrycollective.com/"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful19.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.protest.eu/global#!/home" target="_blank"&gt;Protest&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.protest.eu/global#!/home"&gt;&lt;img  src="http://webdesignledger.com/wp-content/uploads/2011/12/colorful20.jpg" alt="Colorful Websites" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&#xD;
&#xD;
&lt;div id="ckepop" style="float: right; position: relative; top: 35px; right: 20px;"&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p id="PSignature" style="line-height: 20px; background: #FFFAEA no-repeat 2% 50%; font-size: 12px; border: #e0e0e0 1px dashed; padding: 10px;"&gt;作 &amp;nbsp; 者：&lt;a href="http://www.cnblogs.com/xiaoyao2011/" target="_blank"&gt;孟晨&lt;/a&gt; &lt;br /&gt; 出 &amp;nbsp; 处：&lt;a href="http://www.cnblogs.com/xiaoyao2011/" target="_blank"&gt;http://www.cnblogs.com/xiaoyao2011/&lt;/a&gt; &lt;br /&gt;个人站: &amp;nbsp;&lt;a href="http://www.coderidea.com/" target="_blank"&gt;http://www.coderidea.com/&lt;/a&gt;&lt;br /&gt;欢迎任何形式的转载，但请务必注明出处。&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/xiaoyao2011/aggbug/2337650.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiaoyao2011/archive/2012/02/10/20-inspiring-examples-of-colorful-web-designs.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stephen-liu74/archive/2012/02/10/2321386.html</id><title type="text">SQLite学习手册(C/C++接口简介)</title><summary type="text">一、概述： 在SQLite提供的C/C++接口中，其中5个APIs属于核心接口。在这篇博客中我们将主要介绍它们的用法，以及它们所涉及到的核心SQLite对象，如database_connection和prepared_statement。相比于其它数据库引擎提供的APIs，如OCI、MySQL API等，SQLite提供的接口还是非常易于理解和掌握的。 二、核心对象和接口： 1. 核心对象： 在SQLite中最主要的两个对象是，database_connection和prepared_statement。database_connection对象是由sqlite3_open()接口函数创建并返</summary><published>2012-02-09T23:23:00Z</published><updated>2012-02-09T23:23:00Z</updated><author><name>Stephen_Liu</name><uri>http://www.cnblogs.com/stephen-liu74/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/10/2321386.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/10/2321386.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;一、概述：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;在SQLite提供的C/C++接口中，其中5个APIs属于核心接口。在这篇博客中我们将主要介绍它们的用法，以及它们所涉及到的核心SQLite对象，如database_connection和prepared_statement。相比于其它数据库引擎提供的APIs，如OCI、MySQL API等，SQLite提供的接口还是非常易于理解和掌握的。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;二、核心对象和接口：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #333399; font-size: 16px;"&gt;1. 核心对象：&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;在SQLite中最主要的两个对象是，&lt;strong&gt;&lt;span style="color: #0000ff;"&gt;database_connection&lt;/span&gt;&lt;/strong&gt;和&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;prepared_statement&lt;/strong&gt;&lt;/span&gt;。database_connection对象是由sqlite3_open()接口函数创建并返回的，在应用程序使用任何其他SQLite接口函数之前，必须先调用该函数以便获得database_connnection对象，在随后的其他APIs调用中，都需要该对象作为输入参数以完成相应的工作。至于prepare_statement，我们可以简单的将它视为编译后的SQL语句，因此，所有和SQL语句执行相关的函数也都需要该对象作为输入参数以完成指定的SQL操作。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #333399; font-size: 16px;"&gt;2. 核心接口：&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1). sqlite3_open&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;上面已经提到过这个函数了，它是操作SQLite数据库的入口函数。该函数返回的database_connection对象是很多其他SQLite APIs的句柄参数。注意，我们通过该函数既可以打开已经存在的数据库文件，也可以创建新的数据库文件。对于该函数返回的database_connection对象，我们可以在多个线程之间共享该对象的指针，以便完成和数据库相关的任意操作。然而在多线程情况下，我们更为推荐的使用方式是，为每个线程创建独立的database_connection对象。对于该函数还有一点也需要额外说明，我们没有必要为了访问多个数据库而创建多个数据库连接对象，因为通过SQLite自带的ATTACH命令可以在一个连接中方便的访问多个数据库。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;2). sqlite3_prepare&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;该函数将SQL文本转换为prepared_statement对象，并在函数执行后返回该对象的指针。事实上，该函数并不会评估参数指定SQL语句，它仅仅是将SQL文本初始化为待执行的状态。最后需要指出的，对于新的应用程序我们可以使用sqlite3_prepare_v2接口函数来替代该函数以完成相同的工作。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;3). sqlite3_step&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;该函数用于评估sqlite3_prepare函数返回的prepared_statement对象，在执行完该函数之后，prepared_statement对象的内部指针将指向其返回的结果集的第一行。如果打算进一步迭代其后的数据行，就需要不断的调用该函数，直到所有的数据行都遍历完毕。然而对于INSERT、UPDATE和DELETE等DML语句，该函数执行一次即可完成。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;4). sqlite3_column&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;该函数用于获取当前行指定列的数据，然而严格意义上讲，此函数在SQLite的接口函数中并不存在，而是由一组相关的接口函数来完成该功能，其中每个函数都返回不同类型的数据，如：&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;sqlite3_column_blob&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_bytes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_bytes16&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_double&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_int&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_int64&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_text16&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlite3_column_count&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;其中sqlite3_column_count函数用于获取当前结果集中的字段数据。下面是使用sqlite3_step和sqlite3_column函数迭代结果集中每行数据的伪代码，注意这里作为示例代码简化了对字段类型的判断：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; fieldCount = sqlite3_column_count(...);&lt;br /&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (sqlite3_step(...) &amp;lt;&amp;gt; EOF) {&lt;br /&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; fieldCount; ++i) {&lt;br /&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; v = sqlite3_column_int(...,i);&lt;br /&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;     }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;5). sqlite3_finalize&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;该函数用于销毁prepared statement对象，否则将会造成内存泄露。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;6). sqlite3_close&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;该函数用于关闭之前打开的database_connection对象，其中所有和该对象相关的prepared_statements对象都必须在此之前先被销毁。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;三、参数绑定：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;和大多数关系型数据库一样，SQLite的SQL文本也支持变量绑定，以便减少SQL语句被动态解析的次数，从而提高数据查询和数据操作的效率。要完成该操作，我们需要使用SQLite提供的另外两个接口APIs，sqlite3_reset和sqlite3_bind。见如下示例：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; test_parameter_binding() {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt;         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;1. 不带参数绑定的情况下插入多条数据。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt; strSQL[&lt;span style="color: #800080;"&gt;128&lt;/span&gt;];&lt;br /&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; MAX_ROWS; ++i) {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt;             sprintf(strSQL,&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;insert into testtable values(%d)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,i);&lt;br /&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;             sqlite3_prepare_v2(..., strSQL);&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;             sqlite3_step(prepared_stmt);&lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;             sqlite3_finalize(prepared_stmt);&lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;2. 参数绑定的情况下插入多条数据。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; strSQLWithParameter = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;insert into testtable values(?)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;         sqlite3_prepare_v2(..., strSQL);&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; MAX_ROWS; ++i) {&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;             sqlite3_bind(...,i);&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;             sqlite3_step(prepared_stmt);&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;             sqlite3_reset(prepared_stmt);&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;         sqlite3_finalize(prepared_stmt);&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;     }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这里首先需要说明的是，SQL语句"insert into testtable values(?)"中的问号&lt;strong&gt;&lt;span style="color: #0000ff;"&gt;(?)&lt;/span&gt;&lt;/strong&gt;表示参数变量的占位符，该规则在很多关系型数据库中都是一致的，因此这对于数据库移植操作还是比较方便的。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;通过上面的示例代码可以显而易见的看出，参数绑定写法的执行效率要高于每次生成不同的SQL语句的写法，即2)在效率上要明显优于1)，下面是针对这两种写法的具体比较：&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1). 单单从程序表面来看，前者在for循环中执行了更多的任务，比如字符串的填充、SQL语句的prepare，以及prepared_statement对象的释放。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;2). 在SQLite的官方文档中明确的指出，sqlite3_prepare_v2的执行效率往往要低于sqlite3_step的效率。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;3). 当插入的数据量较大时，后者带来的效率提升还是相当可观的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stephen-liu74/aggbug/2321386.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/10/2321386.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wsdj-ITtech/archive/2012/02/10/2278367.html</id><title type="text">Sharepoint学习笔记—Ribbon系列-- 2. 在Ribbon中添加新Tab</title><summary type="text">有了上一节关于Ribbon架构的基础，我们来看看如何向Sharepoint网站的Ribbon中添加我们定义的Tab。</summary><published>2012-02-09T21:31:00Z</published><updated>2012-02-09T21:31:00Z</updated><author><name>wsdj</name><uri>http://www.cnblogs.com/wsdj-ITtech/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wsdj-ITtech/archive/2012/02/10/2278367.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wsdj-ITtech/archive/2012/02/10/2278367.html"/><content type="html">&#xD;
&lt;p&gt;有了上面的基础，我们来看看如何向Sharepoint网站的Ribbon中添加我们定义的Tab。&lt;/p&gt;&#xD;
&lt;p&gt;直接进入操作步骤&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;一、创建 SharePoint 项目 &lt;/p&gt;&#xD;
&lt;p&gt;要添加新选项卡，应首先创建一个空白 SharePoint 项目。如下:&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wsdj-ittech/2011Y/2011Y12M/RibbonInsertNewTab/1.jpg" /&gt;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;把此方案设置成Farm解决方案&lt;/p&gt;&#xD;
&lt;p&gt;然后在此项目中分别加入新的Feature与新的空白Element如下图&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wsdj-ittech/2011Y/2011Y12M/RibbonInsertNewTab/2.jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;二、使用自定义操作中的功能区 XML 定义功能区自定义项&lt;/p&gt;&#xD;
&lt;p&gt;方法是 打开 &lt;span &gt;Elements.xml&lt;/span&gt; 文件,其内容如下:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('eb1c8d02-b3fb-40d5-a8d2-ea7f1abd7b7e')"&gt;&lt;img style="display: none;" id="code_img_opened_eb1c8d02-b3fb-40d5-a8d2-ea7f1abd7b7e"  onclick="cnblogs_code_hide('eb1c8d02-b3fb-40d5-a8d2-ea7f1abd7b7e',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_eb1c8d02-b3fb-40d5-a8d2-ea7f1abd7b7e" &gt;&#xD;
&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;xml&amp;nbsp;version="1.0"&amp;nbsp;encoding="utf-8"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Elements&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://schemas.microsoft.com/sharepoint/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CustomAction&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="MyCustomRibbonTab"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CommandUI.Ribbon.ListView"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegistrationId&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="101"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegistrationType&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="List"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIExtension&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinitions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Tabs._children"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Tab&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="My&amp;nbsp;Custom&amp;nbsp;Tab"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="This&amp;nbsp;holds&amp;nbsp;my&amp;nbsp;custom&amp;nbsp;commands!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="501"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Scaling&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.Scaling"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;MaxSize&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.MaxSize"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GroupId&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Scale&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.Scaling.CustomTabScaling"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GroupId&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Scaling&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Groups&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.Groups"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Group&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="This&amp;nbsp;is&amp;nbsp;a&amp;nbsp;custom&amp;nbsp;group!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Custom&amp;nbsp;Group"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="52"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Template&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Templates.CustomTemplateExample"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Controls&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample.Controls"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Button&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample.HelloWorld"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.HelloWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="15"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Says&amp;nbsp;hello&amp;nbsp;to&amp;nbsp;the&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LabelText&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Hello,&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust1"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Button&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample.GoodbyeWorld"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.GoodbyeWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="17"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Says&amp;nbsp;good-bye&amp;nbsp;to&amp;nbsp;the&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LabelText&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Good-bye,&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust2"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Button&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample.LoveWorld"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.LoveWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="19"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Says&amp;nbsp;I&amp;nbsp;love&amp;nbsp;the&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LabelText&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="I&amp;nbsp;love&amp;nbsp;you,&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust3"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Controls&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Group&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Groups&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Tab&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Templates._children"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;GroupTemplate&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Templates.CustomTemplateExample"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Layout&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LayoutTitle&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Alignment&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Top"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;Type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneRow"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ControlRef&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DisplayMode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Large"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust1"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Alignment&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Top"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;Type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="TwoRow"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ControlRef&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DisplayMode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Medium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust2"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ControlRef&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DisplayMode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Medium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust3"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Layout&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;GroupTemplate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinitions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandlers&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandler&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.HelloWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CommandAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:alert('Hello,&amp;nbsp;world!');"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandler&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.GoodbyeWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CommandAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:alert('Good-bye,&amp;nbsp;world!');"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandler&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.LoveWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CommandAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:alert('I&amp;nbsp;love&amp;nbsp;you,&amp;nbsp;world!');"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandlers&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIExtension&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CustomAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Elements&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面对其内容作如下说明:&amp;nbsp; &lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;xml&amp;nbsp;version="1.0"&amp;nbsp;encoding="utf-8"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Elements&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://schemas.microsoft.com/sharepoint/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CustomAction&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="MyCustomRibbonTab"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CommandUI.Ribbon.ListView"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegistrationId&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="101"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegistrationType&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="List"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIExtension&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinitions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Tabs._children"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;在对Ribbon进行自定义时，你需要把&lt;span &gt;CustomAction&lt;/span&gt; 元素与Ribbon的XML 一起使用。&lt;span &gt;&lt;span &gt;CustomAction元素的&lt;/span&gt;Location&lt;/span&gt; 属性告知 &lt;span &gt;CustomAction&lt;/span&gt; 在何处应用自定义项(即此元素内的所有自定义内容)。&lt;/p&gt;&#xD;
&lt;p&gt;下表对这些Location可能的值进行了说明。本例我们把Location值设置为CommandUI.Ribbon.ListView&#xD;
也即我们此处定义的自定义项(Tab)将在我们显示列表视图的WebPart时出现在Ribbon区域，而基其它时候我们是看不见它的。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div  xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
&lt;table&gt;&#xD;
    &lt;tbody&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;值&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;说明&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;CommandUI.Ribbon&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;对于指定的 &lt;span &gt;RegistrationId&lt;/span&gt;，自定义项出现在任何地方。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;CommandUI.Ribbon.ListView&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;当存在列表视图 Web 部件时出现自定义项。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;CommandUI.Ribbon.EditForm&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;自定义项出现在编辑表单上。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;CommandUI.Ribbon.NewForm&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;自定义项出现在新建表单上。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;CommandUI.Ribbon.DisplayForm&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;自定义项出现在显示表单上。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
    &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;关于RegistrationId属性：用于指定与此操作(&lt;span &gt;CustomAction&lt;/span&gt; )关联的列表或项内容类型的标识符，或文件类型或编程标识符 (ProgID)。&#xD;
关于它们的含义请参见&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="Sharepoint学习笔记&amp;#8212;Ribbon系列-- Reference :List definitions Type and BaseType " href="http://www.cnblogs.com/wsdj-ITtech/archive/2011/12/06/2278252.html"&gt;Sharepoint学习笔记&amp;#8212;Ribbon系列-- Reference :List definitions Type and BaseType &lt;/a&gt;，此处我们设置为101也即我们自定义的CustomAction与&lt;/p&gt;&#xD;
&lt;p&gt;Document library //文档库 进行关联。也就是说当我们选择Sharepoint网站的某个DocumentLibrary List时，就会出现我们自下定义的CustomAction选项卡(Tab),也就是说，&lt;/p&gt;&#xD;
&lt;p&gt;在CustomAction的相关属性设置中，我们解决了它显示的&amp;#8220;时机&amp;#8221;问题。&lt;/p&gt;&#xD;
&lt;p&gt;RegistrationType属性: 用于给每项操作指定注册附件。可能的值包括：ContentType,FileType,List,ProgId&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIExtension&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinitions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Tabs._children"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Tab&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="My&amp;nbsp;Custom&amp;nbsp;Tab"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="This&amp;nbsp;holds&amp;nbsp;my&amp;nbsp;custom&amp;nbsp;commands!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="501"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span &gt;CommandUIDefinition&lt;/span&gt; 元素上的 &lt;span &gt;Location&lt;/span&gt; 定义其内部控件呈现的位置。在本示例中，您将引用服务器功能区(Ribbon)的 &lt;span &gt;Tabs&lt;/span&gt; 集合(Ribbon.Tabs._childern)。&lt;span &gt;_children&lt;/span&gt; 约定告知功能区将以下 XML 插入到输出中以便呈现功能区。在本例中，您将插入 &lt;span &gt;Tab&lt;/span&gt; 元素 XML。&lt;/p&gt;&#xD;
&lt;p&gt;Tab元素中的&lt;span &gt;Sequence&lt;/span&gt; 属性将定义Tab相对于其他Tabs所呈现的位置。Sharepoint系统默认的Tab使用 100 的整倍数作为它们的Sequence值，因此用户自定义的Tab的&lt;span &gt;Sequence&lt;/span&gt; 属性不应是 100 的整倍数以防止与系统的默认Sequence值出现冲突。应避免冲突，以确保对功能区 XML 进行适当处理。&lt;/p&gt;&#xD;
&lt;p&gt;由此可见，CustomAction影响了显示的&amp;#8220;时机&amp;#8221;，此处&lt;span &gt;CommandUIDefinition与Tab中的相关属性设置&lt;/span&gt;影响了显示的"位置"。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Scaling&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.Scaling"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;MaxSize&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.MaxSize"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GroupId&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Scale&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.Scaling.CustomTabScaling"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GroupId&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Scaling&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在创建自定义Tab时，您必须定义在添加控件时如何对Tab进行缩放。通过将 &lt;span &gt;Scaling&lt;/span&gt; 元素与 &lt;span &gt;GroupTemplate&lt;/span&gt; 一起使用可对此进行处理。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;MaxSize&lt;/span&gt; 元素对组(Group)中控件的最大大小进行定义。而 &lt;span &gt;Scale&lt;/span&gt; 元素定义组(Group)如何在不同的情况下进行缩放。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;GroupId&lt;/span&gt; 属性将一个组与缩放大小相关联。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;Size&lt;/span&gt; 属性由稍后在&lt;span &gt;GroupTemplate&lt;/span&gt; 中定义的 &lt;span &gt;Layout&lt;/span&gt; 元素定义。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Groups&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.Groups"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Group&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="This&amp;nbsp;is&amp;nbsp;a&amp;nbsp;custom&amp;nbsp;group!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Custom&amp;nbsp;Group"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="52"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Template&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Templates.CustomTemplateExample"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Controls&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample.Controls"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Button&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.CustomTabExample.CustomGroupExample.HelloWorld"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.HelloWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="15"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Says&amp;nbsp;hello&amp;nbsp;to&amp;nbsp;the&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LabelText&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Hello,&amp;nbsp;World!"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust1"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span &gt;Groups&lt;/span&gt; 元素对将在选项卡上出现的组进行定义。&lt;span &gt;Group&lt;/span&gt; 元素自身具有与其他控件相似的属性以及一个 &lt;span &gt;Template&lt;/span&gt; 属性。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;Template&lt;/span&gt; 属性引用我们后面将要定义的 &lt;span &gt;GroupTemplate，Sharepoin要求每一个Group都必须与某个特定的GroupTemplate项进行绑定，并推荐用户尽量使用用户自已定义的GroupTemplate.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span &gt;Controls&lt;/span&gt; 元素包含将在组中出现的控件。组内部的控件必须定义 &lt;span &gt;TemplateAlias&lt;/span&gt; 和 &lt;span &gt;Command&lt;/span&gt; 属性。与Tab类似，每个控件具有一个 &lt;span &gt;Sequence&lt;/span&gt; 属性，用于定义这些控件将在组中出现的位置。默认控件基于 10 的整倍数，所以任何自定义控件不应使用 10 的整倍数以避免发生冲突。&lt;span &gt;Command&lt;/span&gt; 属性由 &lt;span &gt;CommandUIHandler&lt;/span&gt; 元素使用，并且即使在未指定 &lt;span &gt;CommandUIHandler&lt;/span&gt; 时也要求使用此属性。&lt;span &gt;TemplateAlias&lt;/span&gt; 属性定义控件相对于 &lt;span &gt;GroupTemplate&lt;/span&gt; 出现的位置。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Templates._children"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;GroupTemplate&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Ribbon.Templates.CustomTemplateExample"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Layout&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LayoutTitle&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneLargeTwoMedium"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Alignment&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Top"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;Type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="OneRow"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ControlRef&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DisplayMode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Large"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust1"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Alignment&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Top"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;Type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="TwoRow"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ControlRef&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DisplayMode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Medium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust2"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ControlRef&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DisplayMode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Medium"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;TemplateAlias&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="cust3"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Row&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Section&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Layout&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;GroupTemplate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinition&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIDefinitions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;定义组模板(GroupTemplate)时，您必须将其定义为另一个 &lt;span &gt;CommandUIDefinition&lt;/span&gt;。&lt;span &gt;CommandUIDefinition&lt;/span&gt; 具有 &lt;span &gt;Ribbon.Templates._children&lt;/span&gt; 位置。这与用于组和选项卡的模式相同。&lt;/p&gt;&#xD;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span &gt;GroupTemplate&lt;/span&gt; 元素包含一个 &lt;span &gt;Layout&lt;/span&gt; 元素，后者又包含 &lt;span &gt;Section&lt;/span&gt; 或 &lt;span &gt;OverflowSection&lt;/span&gt; 元素。&lt;span &gt;Layout&lt;/span&gt; 元素具有一个 &lt;span &gt;Title&lt;/span&gt; 属性，可用于 &lt;span &gt;MaxSize&lt;/span&gt; 和 &lt;span &gt;Scale&lt;/span&gt; 元素上的 &lt;span &gt;Size&lt;/span&gt; 属性。&lt;/p&gt;&#xD;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span &gt;Section&lt;/span&gt; 元素具有两个属性。&lt;span &gt;Alignment&lt;/span&gt; 属性对以下 &lt;span &gt;Row&lt;/span&gt; 元素中的控件所处的位置进行定义。&lt;span &gt;Type&lt;/span&gt; 属性定义将在对应的部分显示的行数。一个 &lt;span &gt;Section&lt;/span&gt; 最多具有三个 &lt;span &gt;Row&lt;/span&gt; 元素。&lt;/p&gt;&#xD;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span &gt;Row&lt;/span&gt; 元素包含一个或多个 &lt;span &gt;ControlRef&lt;/span&gt; 元素。每个 &lt;span &gt;ControlRef&lt;/span&gt; 元素定义一个控件在功能区的显示方式。&lt;span &gt;DisplayMode&lt;/span&gt; 属性包含以下值(注:并非所有的控件都提供所有的 DisplayMode 值)。&lt;/p&gt;&#xD;
&lt;div  xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
&lt;table&gt;&#xD;
    &lt;tbody&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;值&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;说明&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;Small&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;显示为无标签文本的小图标。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;Medium&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;显示为带有标签文本的 16 x 16 的图标。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;Large&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;显示为带有标签文本的 32 x 32 的图标。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;Text&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td&gt;&#xD;
            &lt;p&gt;仅显示为文本。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
    &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;还可以有一个 &lt;span &gt;OverflowSection&lt;/span&gt; 元素而不是 &lt;span &gt;Section&lt;/span&gt; 元素。此元素定义一个区域，在此区域中，不必使用 &lt;span &gt;Row&lt;/span&gt; 元素即可显示多个控件。所有的控件都将显示为由 &lt;span &gt;DisplayMode&lt;/span&gt; 属性定义的相同大小。&lt;span &gt;DividerAfter&lt;/span&gt; 和 &lt;span &gt;DividerBefore&lt;/span&gt; 属性定义在显示溢出部分时分隔线将出现的位置。&lt;/p&gt;&#xD;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;向默认功能区位置添加控件时，您应该考虑组模板和缩放。向默认位置添加控件可改变组的显示。大多数默认组模板包含将随自定义控件一起增长的溢出部分。在更高级的方案中，您可以重写缩放来根据设计需要显示控件。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandlers&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandler&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.HelloWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CommandAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:alert('Hello,&amp;nbsp;world!');"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandler&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.GoodbyeWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CommandAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:alert('Good-bye,&amp;nbsp;world!');"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandler&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="CustomTabExample.LoveWorldCommand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CommandAction&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:alert('I&amp;nbsp;love&amp;nbsp;you,&amp;nbsp;world!');"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CommandUIHandlers&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span &gt;&amp;nbsp;CommandUIHandlers&lt;/span&gt; 元素包含所有 &lt;span &gt;CommandUIHandler&lt;/span&gt; 元素。&lt;span &gt;CommandUIHandler&lt;/span&gt; 元素定义功能区上的控件如何响应某个操作。&lt;span &gt;Command&lt;/span&gt; 属性是与随控件定义的 &lt;span &gt;Command&lt;/span&gt; 属性一起使用的命令的唯一名称。&lt;span &gt;CommandAction&lt;/span&gt; 属性包含可对控件执行的操作。此操作可以是 ECMAScript（JavaScript、JScript）、URL 或 &lt;span &gt;UrlAction&lt;/span&gt; 元素中以前包含的任意内容。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;三、部署自定义项&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 按 F5。Visual Studio 2010 中的 SharePoint 开发工具将自动构建和部署功能。&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 转到网站或子网站中的文档库。&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;单击&amp;#8220;My Custom Tab&amp;#8221;选项卡，查看&amp;#8220;自定义组&amp;#8221;，然后单击&amp;#8220;Hello, World&amp;#8221;、&amp;#8220;Good-bye, World&amp;#8221;或&amp;#8220;I Love You, World&amp;#8221;按钮。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wsdj-ittech/2011Y/2011Y12M/RibbonInsertNewTab/t3.jpg" /&gt;&#xD;
&amp;nbsp;&lt;/p&gt; &#xD;
&lt;img src="http://www.cnblogs.com/wsdj-ITtech/aggbug/2278367.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wsdj-ITtech/archive/2012/02/10/2278367.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yexiaochai/archive/2012/02/10/2344750.html</id><title type="text">【jquery版.net控件—dropdownlist】附源码，欢迎大家指点、指正、拍砖！！！</title><summary type="text">前言 为了2012第一个春天，为了我那卑微的工资，为了我那伟大的爱情............................其实是为了自我能力的提升罢了，呵呵！！！（也是为了涨工资吧...）小弟准备向web前段开炮，而对js与jq都是初学，现在借博客园这块宝地来督促自己，借博客园的高手来提点自己。小弟准备陆陆续续用jquery模仿一点.net的控件以提高自己，顺便看看能不能弄一点可用插件出来，各位大哥看到了多多指点哦。控件简单应用 效果图1 初始化效果生成的html代码2 控件选项改变事件以及列表项点击事件（最后三项后期加入未作事件绑定）3 前台调用代码&amp;lt;!DOCTYPE html PU</summary><published>2012-02-09T17:04:00Z</published><updated>2012-02-09T17:04:00Z</updated><author><name>叶小钗</name><uri>http://www.cnblogs.com/yexiaochai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yexiaochai/archive/2012/02/10/2344750.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yexiaochai/archive/2012/02/10/2344750.html"/><content type="html">&lt;h1 style="color: #ffffff; background-color: #888888; width: 100%;"&gt;&lt;span style="color: #ffffff; background-color: #888888; width: 100%;"&gt;前言 &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;为了2012第一个春天，为了我那卑微的工资，为了我那伟大的爱情............................&lt;/p&gt;&#xD;
&lt;p&gt;其实是为了自我能力的提升罢了，呵呵！！！（也是为了涨工资吧...）&lt;/p&gt;&#xD;
&lt;p&gt;小弟准备向web前段开炮，而对js与jq都是初学，现在借博客园这块宝地来督促自己，借博客园的高手来提点自己。&lt;/p&gt;&#xD;
&lt;p&gt;小弟准备陆陆续续用jquery模仿一点.net的控件以提高自己，顺便看看能不能弄一点可用插件出来，各位大哥看到了多多指点哦。&lt;/p&gt;&#xD;
&lt;h1 style="color: #ffffff; background-color: #888888; width: 100%;"&gt;&lt;span style="color: #ffffff; background-color: #888888; width: 100%;"&gt;控件简单应用 &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;效果图&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1 初始化效果&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000430127.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000435613.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;生成的html代码&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000450468.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;2 控件选项改变事件以及列表项点击事件（最后三项后期加入未作事件绑定）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000473928.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000475165.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000480739.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3 前台调用代码&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&#xD;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&#xD;
&amp;lt;head&amp;gt;&#xD;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&#xD;
    &amp;lt;script src="scripts/jquery-1.4.1.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&#xD;
    &amp;lt;script src="js/dropDownList.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&#xD;
    &amp;lt;script type="text/javascript"&amp;gt;&#xD;
        $(document).ready(function () {&#xD;
            var data = [];&#xD;
            for (var i = 0; i &amp;lt; 3; i++) {&#xD;
                data[i] = {};&#xD;
                data[i]["v"] = "value_" + i.toString();&#xD;
                data[i]["t"] = "text_" + i.toString();&#xD;
            }&#xD;
&#xD;
            var $div = $("#divwl");&#xD;
            var drop1 = new dropDownList("drop1");&#xD;
&#xD;
            drop1.event.onChange = onSelectChanged;&#xD;
            drop1.itemEvent.onClick = onItemClick;&#xD;
            drop1.dataSource = data;&#xD;
            drop1.dataValueField = "v";&#xD;
            drop1.dataTextField = "t";&#xD;
            drop1.dataTitleField = "v";&#xD;
            drop1.dataBind($div);&#xD;
&#xD;
            drop1.setSelectedText("text_2");&#xD;
&#xD;
            //动态添加选择项，此处选择项没有事件&#xD;
            for (var i = 0; i &amp;lt; 3; i++) {&#xD;
                var v = "inertValue_" + i;&#xD;
                var t = "insertText_" + i;&#xD;
                var _item = new item(v, t);&#xD;
                _item.load();&#xD;
                drop1.insertItem(_item);&#xD;
            }&#xD;
            drop1.style.width = '300px';&#xD;
            drop1.style.height = '25px';&#xD;
            drop1.style.background = 'Gray';&#xD;
            drop1.styleLoad();&#xD;
&#xD;
            //事件处理函数&#xD;
            function onItemClick() {&#xD;
                var sender = this;&#xD;
                var optionSender = sender.htmlElement;&#xD;
                var selectedValue = optionSender.val();&#xD;
                var item = sender;&#xD;
                var $div = $("#itemText");&#xD;
                $div.html("单项点击事件&amp;lt;hr/&amp;gt;" + "当前项：" + item.attribute.text + "&amp;lt;br/&amp;gt;当前值：" + selectedValue);&#xD;
                $div.fadeIn(500);&#xD;
                $div.fadeOut(5000);&#xD;
            }&#xD;
            function onSelectChanged() {&#xD;
                var sender = this;&#xD;
                var dropSender = sender.htmlElement;&#xD;
                var selectedValue = dropSender.val()&#xD;
                var item = sender.getSelectedItem();&#xD;
                var $div = $("#text");&#xD;
                $div.html("dropdownlist的改变事件&amp;lt;hr/&amp;gt;" + "当前项：" + item.attribute.text + "&amp;lt;br/&amp;gt;当前值：" + selectedValue);&#xD;
                $div.fadeIn(500);&#xD;
                $div.fadeOut(5000);&#xD;
            }&#xD;
            function onSelectClick() {&#xD;
                var sender = this;&#xD;
                var dropSender = sender.htmlElement;&#xD;
                var selectedValue = dropSender.val()&#xD;
                var $div = $("#text");&#xD;
                $div.html("dropdownlist的点击事件，当前值：" + selectedValue);&#xD;
                $div.fadeIn(500);&#xD;
                $div.fadeOut(5000);&#xD;
            }&#xD;
&#xD;
        });&#xD;
      &#xD;
    &amp;lt;/script&amp;gt;&#xD;
&amp;lt;/head&amp;gt;&#xD;
&amp;lt;body&amp;gt;&#xD;
    &amp;lt;div id="divwl"&amp;gt;&#xD;
    &amp;lt;/div&amp;gt;&#xD;
    &amp;lt;div id="text"&amp;gt;&#xD;
    &amp;lt;/div&amp;gt;&#xD;
    &amp;lt;div id="itemText"&amp;gt;&#xD;
    &amp;lt;/div&amp;gt;&#xD;
&amp;lt;/body&amp;gt;&#xD;
&amp;lt;/html&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;1 数据源&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;数据源为我们动态写入的数组。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; data = [];&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;                data[i] = {};&lt;br /&gt;                data[i]["v"] = "value_" + i.toString();&lt;br /&gt;                data[i]["t"] = "text_" + i.toString();&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; $div = $("#divwl");&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; drop1 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; dropDownList("drop1");&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2 基本调用说明&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;  drop1.event.onChange = onSelectChanged;&lt;br /&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;             drop1.itemEvent.onClick = onItemClick;&lt;br /&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;             drop1.dataSource = data;&lt;br /&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;             drop1.dataValueField = "v";&lt;br /&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;             drop1.dataTextField = "t";&lt;br /&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;             drop1.dataTitleField = "v";&lt;br /&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt;             drop1.dataBind($div);&lt;br /&gt;&lt;span style="color: #008080;"&gt;8&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;9&lt;/span&gt;             drop1.setSelectedText("text_2");&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;与.net控件基本一致，给定数据源，但是我这里多出了一个dataTitleField用以显示提示框。&lt;/p&gt;&#xD;
&lt;p&gt;其中，drop1.event.onChange = onSelectChanged;为select 的事件&lt;/p&gt;&#xD;
&lt;p&gt;drop1.itemEvent.onClick = onItemClick; 为option的事件绑定&lt;/p&gt;&#xD;
&lt;p&gt;注意，此处事件绑定采用的是call的用法，所以下方函数：中的this作用域环境要注意。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3 动态添加列表项&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;动态添加选择项，此处选择项没有事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; v = "inertValue_" + i;&lt;br /&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; t = "insertText_" + i;&lt;br /&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; _item = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; item(v, t);&lt;br /&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;                 _item.load();&lt;br /&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt;                 drop1.insertItem(_item);&lt;br /&gt;&lt;span style="color: #008080;"&gt;8&lt;/span&gt;             }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;此处添加的项，便没有做事件绑定了。&lt;/p&gt;&#xD;
&lt;p&gt;再下面的代码便是对应函数便不多说了。&lt;/p&gt;&#xD;
&lt;h1 style="color: #ffffff; background-color: #888888; width: 100%;"&gt;&lt;span style="color: #ffffff; background-color: #888888; width: 100%;"&gt;控件数据源Ajax获取应用 &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;1 效果图&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;基本界面&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000580376.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Ajax获得json数据源：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;code &gt;[{"id":1,"name":"河北"},{"id":2,"name":"江苏"},{"id":3,"name":"四川"},{"id":4,"name":"贵州"}]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;对应数据库数据：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021000593098.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;点击对应省份引发改变事件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/294743/2012021001010068.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;获取数据源：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;code &gt;[{"id":8,"provinceId":3,"name":"成都"},{"id":9,"provinceId":3,"name":"绵阳"},{"id":10,"provinceId":3,"name"&lt;/code&gt;&lt;code &gt;:"遂宁"},{"id":11,"provinceId":3,"name":"南充"}]&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;前台调用代码：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;script src="scripts/jquery-1.4.1.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;script src="js/dropDownList.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;        $(document).ready(&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; () {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; dataProvince = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            $.ajax({&lt;br /&gt;                type: "post",&lt;br /&gt;                url: "Ajax.aspx?sql=select  * from province   ",&lt;br /&gt;                type: "json",&lt;br /&gt;                async: &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;,&lt;br /&gt;                success: &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; (data) {&lt;br /&gt;                    dataProvince = data;&lt;br /&gt;                }&lt;br /&gt;            });&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; $div = $("#province");&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; drop1 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; dropDownList("dropProvince");&lt;br /&gt;            drop1.event.onChange = onSelectChanged;&lt;br /&gt;            drop1.dataSource = dataProvince;&lt;br /&gt;            drop1.dataValueField = "id";&lt;br /&gt;            drop1.dataTextField = "name";&lt;br /&gt;            drop1.dataTitleField = "name";&lt;br /&gt;            drop1.dataBind($div);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; _item = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; item("-1", "==请选择省份==");&lt;br /&gt;            drop1.insertItem(_item);&lt;br /&gt;            drop1.setSelectedText("==请选择省份==");&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; onSelectChanged() {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; sender = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;                var provinceId = sender.getSelectedValue();//也可以&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; provinceId = drop1.getSelectedValue();&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; dataProvince = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;                $.ajax({&lt;br /&gt;                    type: "post",&lt;br /&gt;                    url: "Ajax.aspx?sql=select  * from city where provinceId=" + provinceId + "   ",&lt;br /&gt;                    type: "json",&lt;br /&gt;                    async: &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;,&lt;br /&gt;                    success: &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; (data) {&lt;br /&gt;                        dataProvince = data;&lt;br /&gt;                    }&lt;br /&gt;                });&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; $div1 = $("#city");&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; dropCity = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; dropDownList("dropCity");&lt;br /&gt;&lt;br /&gt;                $div1.html("市：");&lt;br /&gt;                dropCity.dataSource = dataProvince;&lt;br /&gt;                dropCity.dataValueField = "id";&lt;br /&gt;                dropCity.dataTextField = "name";&lt;br /&gt;                dropCity.dataTitleField = "name";&lt;br /&gt;                dropCity.dataBind($div1);&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        });&lt;br /&gt;      &lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;div id="province"&amp;gt;&lt;br /&gt;        省：&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;hr /&amp;gt;&lt;br /&gt;    &amp;lt;div id="city"&amp;gt;&lt;br /&gt;        市：&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个我便暂时不说明了吧，很晚了，明天还要上班呢......&lt;/p&gt;&#xD;
&lt;p&gt;因为不知道看的人多不多，也不知道大家有没有问他，若是有问题我再解答吧，具体请大家自己去运行吧。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a title="dropdownlist源码" href="http://files.cnblogs.com/yexiaochai/01dropDownList.zip" rel="designates"&gt;&amp;nbsp;dropdownlist源代码&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yexiaochai/aggbug/2344750.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yexiaochai/archive/2012/02/10/2344750.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brucewoo/archive/2012/02/10/2344746.html</id><title type="text">基于ArcGIS10.0和Oracle10g的空间数据管理平台十五（C#开发）-空间数据导出</title><summary type="text">我的新浪微博：http://weibo.com/freshairbrucewoo。欢迎大家相互交流，共同提高技术。 又是晚上12点以后了，今晚等待人民网的最新新闻也是没有结果，还是称这个时间写一篇博客吧！我是程序员但是也关心国家大事，自己没有太大的要求，就喜欢有一个稳定和安心的生活和工作环境，仅此而已！ 今天这篇博客还是基于ArcGIS10.0和Oracle10g的空间数据管理平台的设计与实现的继续，前面有一篇博客（十三）介绍空间数据导入的，今天介绍一篇空间数据导出。空间数据导出的作用主要是以另一种形式保存，方便部分数据的转移。下面开始介绍具体实现过程。1.定义个SDE的工作空间并且在构造函数</summary><published>2012-02-09T16:58:00Z</published><updated>2012-02-09T16:58:00Z</updated><author><name>蔷薇理想人生</name><uri>http://www.cnblogs.com/brucewoo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brucewoo/archive/2012/02/10/2344746.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brucewoo/archive/2012/02/10/2344746.html"/><content type="html">&lt;p align="center"&gt;&lt;span&gt;&lt;span&gt;我的新浪微博：&lt;/span&gt;&lt;a href="http://weibo.com/freshairbrucewoo"&gt;&lt;span&gt;&lt;span&gt;http://weibo.com/freshairbrucewoo&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="center"&gt;&lt;span&gt;&lt;span&gt;欢迎大家相互交流，共同提高技术。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;又是晚上12点以后了，今晚等待人民网的最新新闻也是没有结果，还是称这个时间写一篇博客吧！我是程序员但是也关心国家大事，自己没有太大的要求，就喜欢有一个稳定和安心的生活和工作环境，仅此而已！&lt;/p&gt;&#xD;
&lt;p&gt;今天这篇博客还是基于ArcGIS10.0和Oracle10g的空间数据管理平台的设计与实现的继续，前面有一篇博客（十三）介绍空间数据导入的，今天介绍一篇空间数据导出。空间数据导出的作用主要是以另一种形式保存，方便部分数据的转移。下面开始介绍具体实现过程。&lt;/p&gt;&#xD;
&lt;p&gt;1.定义个SDE的工作空间并且在构造函数中初始化&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; IFeatureWorkspace pWorkspaceSDE;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;定义SDE工作空间&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; FrmDataExport()&lt;br /&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt;             InitializeComponent();&lt;br /&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pWorkspaceSDE == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;                 &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取工作空间的一个实例&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;                 pWorkspaceSDE = MapOperation.GetFeatrueWorkspace();&lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;         }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.在form的load函数中初始化表信息，这些表就是可以被导出空间数据表。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 列出所有的表信息&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; FrmDataExport_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;             SqlHelper sh = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlHelper();&lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;             sql = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;select table_name,table_mapname,type from jcsjk_layer l,jcsjk_element e where &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;                 + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;e.id=l.pid and e.category='地震矢量数据'&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;             OracleDataReader odr = sh.ReturnDataReader(sql);&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;[] obj = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;[&lt;span style="color: #800080;"&gt;4&lt;/span&gt;];&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (odr.Read())&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;                 obj[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;] = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;                 obj[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;] = odr[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;                 obj[&lt;span style="color: #800080;"&gt;2&lt;/span&gt;] = odr[&lt;span style="color: #800080;"&gt;2&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;                 obj[&lt;span style="color: #800080;"&gt;3&lt;/span&gt;] = odr[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;                 dataGridViewX1.Rows.Add(obj);&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;             comboBoxEx1.SelectedIndex = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;         }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;3.选择多处数据的格式并做相应的准备工作&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 根据选择的导出数据格式打开相应的文件&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; selectPathBtn_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;             &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;根据导出数据格式打开相应的文件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; (comboBoxEx1.SelectedIndex)&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;                     {&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;                         FolderBrowserDialog folder = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FolderBrowserDialog();&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;                         &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (folder.ShowDialog() == DialogResult.OK)&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;                         {&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;                             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (folder.SelectedPath != &lt;span style="color: #800000;"&gt;""&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;                             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;                                 selectPathTxt.Text = folder.SelectedPath;&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;                             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;                         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;                     }&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #800080;"&gt;1&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;                     { &lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;                         OpenFileDialog ofd = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; OpenFileDialog();&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;                         ofd.Filter = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MDB文件(.mdb) | *.mdb&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;                         ofd.CheckFileExists = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;                         &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ofd.ShowDialog() == DialogResult.OK)&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;                         {&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;                             &lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;                             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ofd.FileName != &lt;span style="color: #800000;"&gt;""&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;                             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;                                 selectPathTxt.Text = ofd.FileName;&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;                             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;                         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;                     }&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt;         }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;4.执行具体的导出功能&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 执行具体的导出功能&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; exportBtn_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (selectPathTxt.Text == &lt;span style="color: #800000;"&gt;""&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;                 MessageBox.Show(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;请选择导出路劲&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;             IWorkspaceFactory pWF = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; (comboBoxEx1.SelectedIndex)&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;                     {&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;                         &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!File.Exists(selectPathTxt.Text))&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;                         {&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;                             &lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;                         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;                         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建一个输出shp文件的工作空间&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;                         pWF = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ShapefileWorkspaceFactoryClass();&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;                         IFeatureWorkspace pFW = pWF.OpenFromFile(selectPathTxt.Text, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; IFeatureWorkspace;&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;                         IWorkspace pW = pFW &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; IWorkspace;&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;                         &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; dataGridViewX1.Rows.Count; ++i)&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;                         {&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;                             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;.Parse(dataGridViewX1.Rows[i].Cells[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Value.ToString()))&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;                             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;                                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (dataGridViewX1.Rows[i].Cells[&lt;span style="color: #800080;"&gt;2&lt;/span&gt;].Value.ToString() != &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;PA&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;                                 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;                                     &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str = dataGridViewX1.Rows[i].Cells[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;].Value.ToString();&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;                                     MapOperation.ConvertFeatureClass(pWorkspaceSDE &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; IWorkspace,&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;                                         pW, str, str, &lt;span style="color: #800080;"&gt;4326&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;                                 } &lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;                                 &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;                                 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;                                     MessageBox.Show(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;属性表不能够导出为Shape文件&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt;                                 }&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt;                             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt;                         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;43&lt;/span&gt;                         MessageBox.Show(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;导出数据完成!&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;44&lt;/span&gt;                     }&lt;br /&gt;&lt;span style="color: #008080;"&gt;45&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;46&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #800080;"&gt;1&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;47&lt;/span&gt;                     {&lt;br /&gt;&lt;span style="color: #008080;"&gt;48&lt;/span&gt;                         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Instantiate an Access workspace factory and create a new personal geodatabase.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;49&lt;/span&gt;                         pWF = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; AccessWorkspaceFactoryClass();&lt;br /&gt;&lt;span style="color: #008080;"&gt;50&lt;/span&gt;                         IWorkspaceName pWN = pWF.Create(Path.GetDirectoryName(selectPathTxt.Text),&lt;br /&gt;&lt;span style="color: #008080;"&gt;51&lt;/span&gt;                              Path.GetFileName(selectPathTxt.Text),&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;52&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;53&lt;/span&gt;                         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Cast the workspace name object to the IName interface and open the workspace.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;54&lt;/span&gt;                         IName pN = (IName)pWN;&lt;br /&gt;&lt;span style="color: #008080;"&gt;55&lt;/span&gt;                         IWorkspace pW = (IWorkspace)pN.Open();&lt;br /&gt;&lt;span style="color: #008080;"&gt;56&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;57&lt;/span&gt;                         &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; dataGridViewX1.Rows.Count; ++i)&lt;br /&gt;&lt;span style="color: #008080;"&gt;58&lt;/span&gt;                         {&lt;br /&gt;&lt;span style="color: #008080;"&gt;59&lt;/span&gt;                             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;.Parse(dataGridViewX1.Rows[i].Cells[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Value.ToString()))&lt;br /&gt;&lt;span style="color: #008080;"&gt;60&lt;/span&gt;                             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;61&lt;/span&gt;                                 &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str = dataGridViewX1.Rows[i].Cells[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;].Value.ToString();&lt;br /&gt;&lt;span style="color: #008080;"&gt;62&lt;/span&gt;                                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (dataGridViewX1.Rows[i].Cells[&lt;span style="color: #800080;"&gt;2&lt;/span&gt;].Value.ToString() != &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;PA&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;63&lt;/span&gt;                                 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;64&lt;/span&gt;                                     MapOperation.ConvertFeatureClass(pWorkspaceSDE &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; IWorkspace,&lt;br /&gt;&lt;span style="color: #008080;"&gt;65&lt;/span&gt;                                        pW, str, str, &lt;span style="color: #800080;"&gt;4326&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;66&lt;/span&gt;                                 } &lt;br /&gt;&lt;span style="color: #008080;"&gt;67&lt;/span&gt;                                 &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;68&lt;/span&gt;                                 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;69&lt;/span&gt;                                     ITable pSourceT = pWorkspaceSDE.OpenTable(str);&lt;br /&gt;&lt;span style="color: #008080;"&gt;70&lt;/span&gt;                                     IFeatureWorkspace pFW = pW &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; IFeatureWorkspace;&lt;br /&gt;&lt;span style="color: #008080;"&gt;71&lt;/span&gt;                                     ITable pTargetT = pFW.CreateTable(str, pSourceT.Fields, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;72&lt;/span&gt;                                     FusedIndexTable(&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; pSourceT, &lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; pTargetT);&lt;br /&gt;&lt;span style="color: #008080;"&gt;73&lt;/span&gt;                                 }&lt;br /&gt;&lt;span style="color: #008080;"&gt;74&lt;/span&gt;                             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;75&lt;/span&gt;                         }&lt;br /&gt;&lt;span style="color: #008080;"&gt;76&lt;/span&gt;                         MessageBox.Show(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;导出数据完成!&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;77&lt;/span&gt;                     }&lt;br /&gt;&lt;span style="color: #008080;"&gt;78&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;79&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;80&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;81&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;82&lt;/span&gt;         }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;5.如果导出的是mdb的格式，而且是以追加的方式，那么下面的函数将实现这个功能。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;         &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 如果目的数据库中已经有表，则将新的记录追加进去 &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="FromTable"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;导出表&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="ToTable"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;导入表&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; FusedIndexTable(&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; ITable FromTable, &lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt; ITable ToTable)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (FromTable == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || ToTable == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;             IRow pFromRow;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;             ICursor pToCursor, pFromCursor;&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;             IRowBuffer pToRowBuffer;&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; pIndex;&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;             pToRowBuffer = ToTable.CreateRowBuffer();&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;             pToCursor = ToTable.Insert(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;             pFromCursor = FromTable.Search(&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;             pFromRow = pFromCursor.NextRow();&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;             &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (pFromRow != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;                 &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; pFromRow.Fields.FieldCount; i++)&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;                 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;                     pIndex = pToRowBuffer.Fields.FindField(pFromRow.Fields.get_Field(i).Name.Trim());&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;                     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pFromRow.Fields.get_Field(i).Editable &amp;amp;&amp;amp; pIndex &amp;gt; -&lt;span style="color: #800080;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;                     {&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;                         pToRowBuffer.set_Value(pIndex, pFromRow.get_Value(i));&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;                     }&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;                 }&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;                 pToCursor.InsertRow(pToRowBuffer);&lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;                 pFromRow = pFromCursor.NextRow();&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;             System.Runtime.InteropServices.Marshal.ReleaseComObject(pToCursor);&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;             pFromRow = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;             pFromCursor = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;             pToRowBuffer = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;         }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;6.其他功能：主要就是一些小功能，例如界面的布局设计，选择导出的文件名，导出以后即使清空文件名等。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;总结：其实空间数据导出功能也是主要用到一个技术：就是空间数据格式的相互转换。这个技术也是空间数据导入使用的主要功能或技术。还有一点值得提的是：把所有的表以及表的一些描述信息以列表的形式展现出来方便用户选择，选择的策略是任意多个需要导出的表，但是同时只能选择一种格式。如果需要导出多种格式，就需要多执行几次导出功能，这点是可以改进的地方，也可以用多选项给出，然后根据用户选择一次性导出多种格式，这样也简单的提升了用户使用的效率。呵呵，优化无处不在。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brucewoo/aggbug/2344746.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brucewoo/archive/2012/02/10/2344746.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/OceanEyes/archive/2012/02/10/SANCENG.html</id><title type="text">深入浅出三层架构</title><summary type="text">三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为：表现层（UI）、业务逻辑层（BLL）、数据访问层（DAL）。区分层次的目的即为了“高内聚，低耦合”的思想，复杂项目不能把SQL语句直接写到程序里，不模块话，难以维护。应该采取三层架构。</summary><published>2012-02-09T16:35:00Z</published><updated>2012-02-09T16:35:00Z</updated><author><name>36氪</name><uri>http://www.cnblogs.com/OceanEyes/</uri></author><link rel="alternate" href="http://www.cnblogs.com/OceanEyes/archive/2012/02/10/SANCENG.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/OceanEyes/archive/2012/02/10/SANCENG.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 15px;"&gt;这几天看了不少三层架构的资料，整理整理&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&amp;mdash;&amp;mdash;故写篇博文谈谈自己的看法。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;三层架构概念：&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/299214/2012021000085552.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为：表现层（UI）、业务逻辑层（BLL）、数据访问层（DAL）。区分层次的目的即为了&amp;ldquo;高内聚，低耦合&amp;rdquo;的思想，复杂项目不能把SQL语句直接写到程序里，不模块话，难以维护。应该采取三层架构。&lt;/p&gt;&#xD;
&lt;p&gt;1、表现层（UI）：通俗讲就是展现给用户的界面，即用户在使用一个系统的时候他的所见所得。&lt;/p&gt;&#xD;
&lt;p&gt;2、业务逻辑层（BLL）：针对具体问题的操作，也可以说是对数据层的操作，对数据业务逻辑处理。&lt;/p&gt;&#xD;
&lt;div &gt;3、数据访问层（DAL）：该层所做事务直接操作数据库，针对数据的增添、删除、修改、查找等。&lt;/div&gt;&#xD;
&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div &gt;简单的说，UI层调用BLL，BLL调用DAL，数据用Model进行传递，Model为各层之间架起了数据传输的桥梁。&lt;/div&gt;&#xD;
&lt;div &gt;参考模型：UI&amp;lt;--&amp;gt;Model&amp;lt;--&amp;gt;BLL&amp;lt;--&amp;gt;Model&amp;lt;--&amp;gt;DAL&lt;/div&gt;&#xD;
&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div &gt;下面我以一个简单的例子来细数三层架构：&lt;/div&gt;&#xD;
&lt;h1 &gt;代码剖析：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;新建一个项目（Windows 窗体应用程序），再在根目录下新建3个文件夹，分别是Model,DAL,BLL。&lt;/li&gt;&#xD;
&lt;li&gt;在Model下添加一个Person类&lt;/li&gt;&#xD;
&lt;li&gt;在DAL下添加一个SQLHelper类和一个PersonDAL类。&lt;/li&gt;&#xD;
&lt;li&gt;在BLL下添加PersonBLL类&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;h2 &gt;Person.cs代码如下：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; 三层架构Demo.Model&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Person&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Id { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;;}&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Age { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Name { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQLHelper类，封装了数据库操作的方法：&lt;/p&gt;&#xD;
&lt;h2 &gt;SQLHelper.cs代码入下：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Configuration;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; 三层架构Demo.DAL&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; SQLHelper&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;public static readonly string connStr = System.Configuration.ConfigurationSettings.AppSettings["dbconnstr"];&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得连接字符串&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; connStr =&lt;br /&gt;            ConfigurationManager.ConnectionStrings[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;dbconnstr&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;].ConnectionString;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 执行方法ExecuteNonQuery&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="cmdText"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;要执行的sql语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameters"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;参数数组&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;受影响的行数&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; ExecuteNonQuery(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cmdText,&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;params&lt;/span&gt; SqlParameter[] parameters)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn=&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection (connStr))&lt;br /&gt;            {&lt;br /&gt;                conn.Open();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlCommand cmd= conn.CreateCommand())&lt;br /&gt;                {&lt;br /&gt;                    cmd.CommandText = cmdText;&lt;br /&gt;                    cmd.Parameters.AddRange(parameters);&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i=cmd.ExecuteNonQuery();&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; i;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 执行ExecuteScalar() 返回第一行第一列数据&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="cmdText"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;要执行的sql语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameters"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;参数数组&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;返回第一行第一列数据&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; ExecuteScalar(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cmdText,&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;params&lt;/span&gt; SqlParameter[] parameters)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn=&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(connStr))&lt;br /&gt;            {&lt;br /&gt;                conn.Open();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlCommand cmd=conn.CreateCommand())&lt;br /&gt;                {&lt;br /&gt;                    cmd.CommandText = cmdText;&lt;br /&gt;                    cmd.Parameters.AddRange(parameters);&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; cmd.ExecuteScalar();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 执行ExecuteDataTable（）方法&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="cmdText"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;要执行的Sql语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameters"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;参数数组&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;返回一个DataTable&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;  DataTable ExecuteDataTable(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cmdText,&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;params&lt;/span&gt; SqlParameter[] parameters)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn=&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection (connStr))&lt;br /&gt;            {&lt;br /&gt;                conn.Open();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlCommand cmd=conn.CreateCommand())&lt;br /&gt;                {&lt;br /&gt;                    cmd.CommandText = cmdText;&lt;br /&gt;                    cmd.Parameters.AddRange(parameters);&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; ( SqlDataAdapter adapter=&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlDataAdapter (cmd))&lt;br /&gt;                    {&lt;br /&gt;                        DataTable dt = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;                        adapter.Fill(dt);&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; dt;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 执行ExecuteSqlDataReader()方法&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="cmdText"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;要执行的Sql语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameters"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;参数数组&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;返回一个SqlDataReader&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; SqlDataReader ExecuteSqlDataReader(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cmdText,&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;params&lt;/span&gt; SqlParameter[] parameters)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn=&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection (connStr))&lt;br /&gt;            {&lt;br /&gt;                conn.Open();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlCommand cmd=conn.CreateCommand())&lt;br /&gt;                {&lt;br /&gt;                    cmd.CommandText = cmdText;&lt;br /&gt;                    cmd.Parameters.AddRange(parameters);&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; cmd.ExecuteReader();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }                                                 &lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;PersonDAL.cs代码如下：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; 三层架构Demo.Model;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; 三层架构Demo.DAL&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; PersonDAL&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 返回一个新增对象的主键，设为自动增长&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="model"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Addnew(Person model)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;insert into T_person(Age,Name) output inserted.id values(@Age,@Name)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; obj=&lt;br /&gt;                SQLHelper.ExecuteScalar(sql,&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Age&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,model.Age),&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,model.Name));&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Convert ： 与 value 等效的 32 位有符号整数，如果 value 为 null，则为零。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Convert.ToInt32(obj);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 删除数据&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="id"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Delete(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; id)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;delete form T_Person where Id=@Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; SQLHelper.ExecuteNonQuery(sql,&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,id));&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 修改数据&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="model"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Update(Person model)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;update T_Person set Age=@Age,Name=@Name where Id=@Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; SQLHelper.ExecuteNonQuery(sql,&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Age&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,model.Age),&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,model.Name),&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,model.Id));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 查询数据&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="id"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Person Get(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; id)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sql=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;select * from T_Person where Id=@Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            DataTable dt=SQLHelper.ExecuteDataTable(sql,&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,id));&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (dt.Rows.Count&amp;lt;=&lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (dt.Rows.Count==&lt;span style="color: #800080;"&gt;1&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                Person model1 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Person();&lt;br /&gt;                model1.Id = Convert.ToInt32(dt.Rows[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;][&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]);&lt;br /&gt;                model1.Name = Convert.ToString(dt.Rows[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;][&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]);&lt;br /&gt;                model1.Age = Convert.ToInt32(dt.Rows[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;][&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Age&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]);&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; model1;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;以防意外情况&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Exception(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;数据库中有两条及以上重复数据&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取全部数据&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;Person&amp;gt; GetAll()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sql = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;select * from T_Person&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            DataTable dt = SQLHelper.ExecuteDataTable(sql);&lt;br /&gt;            List&amp;lt;Person&amp;gt; list = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Person&amp;gt;();&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (DataRow row &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; dt.Rows)&lt;br /&gt;            {&lt;br /&gt;                Person model = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Person();&lt;br /&gt;                model.Id = Convert.ToInt32(row[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]);&lt;br /&gt;                model.Name =Convert.ToString(row[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]);&lt;br /&gt;                model.Age = Convert.ToInt32(row[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Age&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]);&lt;br /&gt;                list.Add(model);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; list;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;进行逻辑判断的BLL层代码看似是这样的：&lt;/p&gt;&#xD;
&lt;p&gt;PersonBLL.cs代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; 三层架构Demo.Model;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; 三层架构Demo.DAL;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; 三层架构Demo.BLL&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; PersonBLL&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Addnew(Person model)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonDAL().Addnew(model);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Delete(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; id)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonDAL().Delete(id);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Update(Person model)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonDAL().Update(model);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Person Get(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; id)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonDAL().Get(id);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;Person&amp;gt; GetAll()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonDAL().GetAll();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;UI层进行测试：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Form1.cs代码如下：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Drawing;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; 三层架构Demo.Model;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; 三层架构Demo.DAL;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; 三层架构Demo.BLL;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; 三层架构Demo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Form1 : Form&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Form1()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Person p1 = new Person();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;p1.Age = 22;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;p1.Name = "Eyes";&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;int id=new PersonDAL().Addnew(p1);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;MessageBox.Show(id.ToString());&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;PersonDAL p = new PersonDAL();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Person a = p.Get(1);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;a.Name = "jack";&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;MessageBox.Show(a.Name + "," + a.Age);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;p.Update(a);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;PersonBLL bll = new PersonBLL();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Person p = bll.Get(1);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;p.Name = "Admin";&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;MessageBox.Show(p.Name + "," + p.Age);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;bll.Update(p);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;            PersonBLL b = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonBLL();&lt;br /&gt;            List&amp;lt;Person&amp;gt; list = (List&amp;lt;Person&amp;gt;)b.GetAll();&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Person item &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; list)&lt;br /&gt;            {&lt;br /&gt;                MessageBox.Show(item.Id+&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;+item.Name+&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;+item.Age);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Form1_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            dataGridView1.DataSource = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PersonBLL().GetAll();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;总结：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;h2 &gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;h2 &gt;&lt;span &gt;优点&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、开发人员可以只关注整个结构中的其中某一层；&lt;/p&gt;&#xD;
&lt;p&gt;2、可以很容易的用新的实现来替换原有层次的实现；&lt;/p&gt;&#xD;
&lt;p&gt;3、可以降低层与层之间的依赖；&lt;/p&gt;&#xD;
&lt;p&gt;4、有利于标准化；&lt;/p&gt;&#xD;
&lt;p&gt;5、利于各层逻辑的复用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;缺点&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构，很多业务可以直接造访数据库，以此获取相应的数据，如今却必须通过中间层来完成。&lt;/p&gt;&#xD;
&lt;p&gt;2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能，为保证其设计符合分层式结构，可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。&lt;/p&gt;&#xD;
&lt;p&gt;3、增加了开发成本。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&amp;nbsp;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/OceanEyes/aggbug/2344728.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/OceanEyes/archive/2012/02/10/SANCENG.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gannan/archive/2012/02/10/2344709.html</id><title type="text">NUnit之Attribue详解</title><summary type="text">在上一篇文章“NUnit之Assertion详解”中，给大家介绍了NUnit的断言，现在接着给大家介绍Attribute在NUnit中的具体作用。Attribute是C#一个重要的语言特征，园子里应该有不少这方面的文章，如果对Attribute不太了解，建议先去稍稍了解一下，亲手做个小程序感受一下Attribute的作用。我们在使用NUnit编写测试用例时，离不开两个最基本的Attribute，例如，我们要测试一个类的Add方法，使用的代码如下：[TestFixture]public class MyTest{ [Test] public void TestAdd() { ...</summary><published>2012-02-09T16:01:00Z</published><updated>2012-02-09T16:01:00Z</updated><author><name>甘南</name><uri>http://www.cnblogs.com/gannan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gannan/archive/2012/02/10/2344709.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gannan/archive/2012/02/10/2344709.html"/><content type="html">&lt;p&gt;在上一篇文章&amp;ldquo;&lt;a href="http://www.cnblogs.com/gannan/archive/2012/02/09/2343416.html"&gt;NUnit之Assertion详解&lt;/a&gt;&amp;rdquo;中，给大家介绍了NUnit的断言，现在接着给大家介绍Attribute在NUnit中的具体作用。&lt;/p&gt;&#xD;
&lt;p&gt;Attribute是C#一个重要的语言特征，园子里应该有不少这方面的文章，如果对Attribute不太了解，建议先去稍稍了解一下，亲手做个小程序感受一下Attribute的作用。&lt;/p&gt;&#xD;
&lt;p&gt;我们在使用NUnit编写测试用例时，离不开两个最基本的Attribute，例如，我们要测试一个类的Add方法，使用的代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[TestFixture]&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MyTest&lt;br /&gt;{&lt;br /&gt;    [Test]&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; TestAdd()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; a = &lt;span style="color: #800080;"&gt;99&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; b = &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; value = MyMath.Add(a,b);&lt;br /&gt;        Assert.AreEqual(value, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    Public &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; TestDel()&lt;br /&gt;    {&lt;br /&gt;       &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; value = MyMath.del(&lt;span style="color: #800080;"&gt;99&lt;/span&gt;,&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;br /&gt;       Assert.AreEqual(value, &lt;span style="color: #800080;"&gt;98&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;上面的代码中，已经使用了两个Attribute，即[TestFixture]和[Test]，其中[TestFixture]的作用是声明MyTest类是一个含有测试方法的类，而[Test]则说明TestAdd是一个测试方法，而TestDel由于没有用[Test]声明，所以它&lt;span style="color: #ff0000;"&gt;不是&lt;/span&gt;测试方法，虽然它以Test开头。&lt;/p&gt;&#xD;
&lt;p&gt;对于编译后的Assembly文件，NUnit就是通过查找[TestFixture]和[Test]这类它支持的与测试相关的Attribute来确定哪些类包含了测试方法，以及这些类中的哪些方法是测试方法。&lt;/p&gt;&#xD;
&lt;p&gt;对于上面的例子，如果用NUnit的图形化界面打开其编译后的Assembly，应该看到如下的界面，TedtAdd方法以及它所属的命名空间按照树的形式展开，而TestDel方法由于没有[Test]的声明，所以它只是一个普通的方法，也就没有在树中展现：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/223417/2012020923433735.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;点击Run按钮后，NUnit会运行所有的测试方法，运行后的界面如下&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/223417/2012020923435465.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过上面的小例子，我们知道了[TestFixture]和[Test]这两个Attribute的作用，对它支持的Attribute有了初步了解。&lt;/p&gt;&#xD;
&lt;p&gt;如果查看NUnit的源代码(大家可以去官网注册然后下载)，可以知道，在NUnit.Framework这个命名空间中，有TestFixtureAttribute和TestAttribute两个类，它们负责解析带有[TestFixture]和[Test]声明的类和方法（在C#语法规范中，要实现一个名称为[ABC]的Attribute，必须建立名称为ABCAttribute的类，并继承于Attribute这个基类）。&lt;/p&gt;&#xD;
&lt;p&gt;NUnit支持的Attribute远不止上面两个，我大致把它们分为四大类，分别是控制类、数值类、平台类和其它类，下面逐一介绍&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #3366ff;"&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;一：控制类&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这些Attribute控制测试类或者测试方法，而且成对出现，功能基本相比，了解一个就自然了解另外一个。&lt;/p&gt;&#xD;
&lt;p&gt;[TestFixture]/[Explicit]：声明一个类是测试类/声明一个类只有在UI界面被选中时才执行&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[TestFixtureSetup]/[TestFixtureTearDown]：在测试开始前/结束后要执行的操作，一个TestFixture只能有一个TestFixtureSetup或TestFixtureTearDown。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[Test]/[Ignore]：是测试方法/忽略掉，测试时不执行&lt;/p&gt;&#xD;
&lt;p&gt;[Setup]/[TearDown]：每个测试方法在执行前/结束后要执行的操作&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #3366ff;"&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;二：数值类&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;数值类Attribue是NUnit的一大亮点，善于使用这些Attribue，将使测试方法变得清晰、简洁、可读性强、可扩展性强，有利于进行数据驱动下的测试。&lt;/p&gt;&#xD;
&lt;p&gt;为了说明下面的例子，使用下面的方法，也就是打印输出输入值及其数据类型，这样便于把执行的结果通过打印的方式在NUnit中输出&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;Console.WriteLine(t + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;, its type:&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + &lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;(T));&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="color: #339966;"&gt;&lt;strong&gt;[Values]：&lt;/strong&gt;&lt;/span&gt;以参数的形式传入一组值，NUnit会把这组值分解成相应数量的子测试。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;例如下面的代码，分别在[Values]中传入三组共8个值，在执行时便一共会分解成8个子测试方法，例如&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;TestPrintInt([&lt;span style="color: #ff0000;"&gt;Values&lt;/span&gt;(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, &lt;span style="color: #800080;"&gt;2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;3&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; x)会被分解为&lt;br /&gt;TestPrintInt(&lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;)&lt;br /&gt;TestPrintInt(&lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;)&lt;br /&gt;TestPrintInt(&lt;span style="color: #ff0000;"&gt;3&lt;/span&gt;)三组&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;如下图，当选中ValueDemo这个节点，然后点击Run按钮后，会看到一共测试了8个测试用例。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/223417/2012020923492975.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当了解了这个Attribue的设计思路后，以后的其它Attribute也就很容易理解了，往往通过它们的命名就可以猜出一二。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #339966;"&gt;[ValueSource]：&lt;/span&gt;&lt;/strong&gt;以数据源（Object类型）作为参数，如下图，左边是源程序，右边是编译后生成的子测试&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/223417/2012020923502387.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #339966;"&gt;[Combinatorial]：&lt;/span&gt;&lt;/strong&gt;两组测试数据进行组合，下面的代码会生成12个子测试，如图&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/223417/2012020923513334.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #339966;"&gt;[Sequential]&lt;/span&gt;&lt;/strong&gt;：和上面[&lt;span data-mce-=""&gt;Combinatorial&lt;/span&gt;]的类似，不同之处见下图&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/223417/2012020923523850.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面其它的Attribue也都大同小异，不愿意看文字说明的话，大家用NUnit运行一下示例程序，再对比一下源程序就知道了&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #339966;"&gt;[Range]&lt;/span&gt;&lt;/strong&gt;：生成某个数据范围内的子测试，如&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;TestPrintColsole([&lt;span style="color: #ff0000;"&gt;Range&lt;/span&gt;(&lt;span style="color: #800080;"&gt;0.2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0.6&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0.2&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; d)：生成0.&lt;span style="color: #800080;"&gt;2&lt;/span&gt;,&lt;span style="color: #800080;"&gt;0.4&lt;/span&gt;,&lt;span style="color: #800080;"&gt;0&lt;/span&gt;.6三个子测试用例&lt;br /&gt;&lt;br /&gt;TestPrintColsole([&lt;span style="color: #ff0000;"&gt;Values&lt;/span&gt;(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, &lt;span style="color: #800080;"&gt;2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;3&lt;/span&gt;, &lt;span style="color: #800080;"&gt;4&lt;/span&gt;, &lt;span style="color: #800080;"&gt;5&lt;/span&gt;, &lt;span style="color: #800080;"&gt;6&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; x, [&lt;span style="color: #ff0000;"&gt;Range&lt;/span&gt;(&lt;span style="color: #800080;"&gt;0.2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0.6&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0.2&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; d)：两个Attribuee结合，共生成18个子测试用例&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #339966;"&gt;[Random]&lt;/span&gt;&lt;/strong&gt;：在某个范围内随机生成测试用例，&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;TestPrintColsole([&lt;span style="color: #ff0000;"&gt;Random&lt;/span&gt;(-&lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;5&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; d)：-1到1之间生成5个测试用例&lt;br /&gt;&lt;br /&gt;TestPrintColsole([Values(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, &lt;span style="color: #800080;"&gt;2&lt;/span&gt;, &lt;span style="color: #800080;"&gt;3&lt;/span&gt;, &lt;span style="color: #800080;"&gt;4&lt;/span&gt;, &lt;span style="color: #800080;"&gt;5&lt;/span&gt;, &lt;span style="color: #800080;"&gt;6&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; x, [Random(-&lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;5&lt;/span&gt;)] &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; d) ：共生成30个子测试用例&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;三：平台类&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;[Culture]&lt;/span&gt;&lt;/strong&gt;：当Culture满足某条件下，才执行测试，如：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[&lt;span style="color: #ff0000;"&gt;Culture&lt;/span&gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;fr-FR&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]：仅当在法文Culture时，执行测试&lt;br /&gt;&lt;br /&gt;[&lt;span style="color: #ff0000;"&gt;Culture&lt;/span&gt;(Exclude = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;en,de&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]：非英文和德文Culture时，才执行测试&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;[Platform]&lt;/span&gt;&lt;/strong&gt;：当Platform满足某条件下，才执行测试，如：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[&lt;span style="color: #ff0000;"&gt;Platform&lt;/span&gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NET-4.0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]：仅当framework版本是4.0时，才执行测试&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;br /&gt;下面是NUnit官网声称的，其支持的平台类型:&lt;/p&gt;&#xD;
&lt;table style="width: 100%;" border="0" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Win&lt;/td&gt;&#xD;
&lt;td&gt;Win32&lt;/td&gt;&#xD;
&lt;td&gt;Win32S&lt;/td&gt;&#xD;
&lt;td&gt;Windows&lt;/td&gt;&#xD;
&lt;td&gt;Win32NT&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;WinCE&lt;/td&gt;&#xD;
&lt;td&gt;Win95&lt;/td&gt;&#xD;
&lt;td&gt;Win98&lt;/td&gt;&#xD;
&lt;td&gt;WinMe&lt;/td&gt;&#xD;
&lt;td&gt;NT3&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;NT4&lt;/td&gt;&#xD;
&lt;td&gt;NT5&lt;/td&gt;&#xD;
&lt;td&gt;NT6&lt;/td&gt;&#xD;
&lt;td&gt;Win2K&lt;/td&gt;&#xD;
&lt;td&gt;WinXP&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Win2003Server&lt;/td&gt;&#xD;
&lt;td&gt;Vista&lt;/td&gt;&#xD;
&lt;td&gt;Win2008Server&lt;/td&gt;&#xD;
&lt;td&gt;Win2008ServerR2&lt;/td&gt;&#xD;
&lt;td&gt;Windows7&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Unix&lt;/td&gt;&#xD;
&lt;td&gt;Linux&lt;/td&gt;&#xD;
&lt;td&gt;Net&lt;/td&gt;&#xD;
&lt;td&gt;Net-1.0&lt;/td&gt;&#xD;
&lt;td&gt;Net-1.1&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Net-2.0&lt;/td&gt;&#xD;
&lt;td&gt;Net-3.0&lt;/td&gt;&#xD;
&lt;td&gt;Net-3.5&lt;/td&gt;&#xD;
&lt;td&gt;Net-4.0&lt;/td&gt;&#xD;
&lt;td&gt;NetCF&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;SSCLI&lt;/td&gt;&#xD;
&lt;td&gt;Rotor&lt;/td&gt;&#xD;
&lt;td&gt;Mono&lt;/td&gt;&#xD;
&lt;td&gt;Mono-1.0&lt;/td&gt;&#xD;
&lt;td&gt;Mono-2.0&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Mono-3.0&lt;/td&gt;&#xD;
&lt;td&gt;Mono-3.5&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&lt;span style="color: #0000ff;"&gt;四：其它类&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;[Category]&lt;/strong&gt;&lt;/span&gt;：将测试方法分组，NUnit会取出所有的组名，列在Categories中，点击它可以看到。这提供了另外一种测试用例的运行方法，用户可以在些选择某一类的用例进行测试，而不是只能以点击分单位&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;[ExpectedException]&lt;/span&gt;&lt;/strong&gt;：运行时抛出的异常才能预期的行为。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;如果没有这个Attribute，要测试某些异常时，&lt;span&gt;只能使用Try Catch的方式，而下面的代码则更为简洁：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[Test]&lt;br /&gt;[&lt;span style="color: #ff0000;"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;(System.DivideByZeroException))]//发生DivideByZeroException时，测试通过&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Test1()&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; a = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; b = &lt;span style="color: #800080;"&gt;1&lt;/span&gt; / a;&lt;br /&gt;    PrintConsole&amp;lt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;gt;.Print(b);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[Test]&lt;br /&gt;[&lt;span style="color: #ff0000;"&gt;ExpectedException&lt;/span&gt;( &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;System.DivideByZeroException&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]//发生DivideByZeroException时，测试通过&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Test2()&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; a = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; b = &lt;span style="color: #800080;"&gt;1&lt;/span&gt; / a;&lt;br /&gt;    PrintConsole&amp;lt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&amp;gt;.Print(b);&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;[Maxtime]/ [Timeout]&lt;/span&gt;&lt;/strong&gt;: 测试用例的最大执行时间，前者超时时不取消测试，而后者会强行中断，用法如下&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[Test, &lt;span style="color: #ff0000;"&gt;Maxtime&lt;/span&gt;(&lt;span style="color: #800080;"&gt;2000&lt;/span&gt;)]&lt;br /&gt;&lt;br /&gt;[Test, &lt;span style="color: #ff0000;"&gt;Timeout&lt;/span&gt;(&lt;span style="color: #800080;"&gt;2000&lt;/span&gt;)]&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;[Repeat]&lt;/span&gt;&lt;/strong&gt;: 重复执行多少次，用法如下&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[Test, &lt;span style="color: #ff0000;"&gt;Repeat&lt;/span&gt;(&lt;span style="color: #800080;"&gt;100&lt;/span&gt;)]&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;[RequiresMTA]/ [RequiresSTA]/ [RequiresThread]&lt;/span&gt;&lt;/strong&gt;：测试用例必须的在多线程、单线程、独立的线程状态下运行，这三个我没有具体使用过，大家有兴起可以试试。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;关于NUnit的Attribue就介绍这些，建议对此有兴起的网友，多关注其中数值类和平台类，或是修改NUnit的源代码，实现自己的Attribute，下文会有所介绍。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="color: #ff0000;"&gt;&lt;a href="http://files.cnblogs.com/gannan/NunitDemo.rar"&gt;&lt;span style="color: #ff0000;"&gt;点此&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;下载&lt;span&gt;VS2010格式的&lt;/span&gt;示例程序，解压缩的DLL目录下有NUnit库，引用该库即可以运行。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gannan/aggbug/2344709.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gannan/archive/2012/02/10/2344709.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html</id><title type="text">淘宝API开发系列---淘宝API的测试及使用</title><summary type="text">在很久之前，由于对淘宝的API开发比较感兴趣，写了几篇关于淘宝API开发方面的随笔《淘宝API开发系列--开篇概述》和《淘宝API开发系列--商家的绑定》等文章，近期由于一客户需要一些淘宝API的例子，而我原来开发的例子已经过去两年了，之前我是基于一个中间组件top4net来进行开发的，这个模块就是在淘宝API SDK的基础上做了一些封装，不过原来的例子确已经不能运行了。因此重新捡起行头，继续研究有啥变化的地方，不过发现虽然时间过去已经快两年了，淘宝API的使用模式，一直没有变化过，可能变化的就是API的一些细微的地方吧，因此这次，就摒弃了中间组件的方式，就直接使用淘宝官方提供的taobao-sdk-net.zip(http://dl.open.taobao.com/sdk/taobao-sdk-net.zip) 来进行开发，发现其实模式一样，操作也差不多而已，但是处理起来的细节有很多不同的地方。</summary><published>2012-02-09T15:55:00Z</published><updated>2012-02-09T15:55:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html"/><content type="html">&lt;p&gt;在很久之前，由于对淘宝的API开发比较感兴趣，写了几篇关于淘宝API开发方面的随笔《&lt;span  style="font-family: Arial; font-weight: bold; line-height: 25px; "&gt;&lt;a id="cb_post_title_url" href="http://www.cnblogs.com/wuhuacong/archive/2010/03/19/1690240.html" style="color: #223355; text-decoration: none; "&gt;淘宝API开发系列--开篇概述&lt;/a&gt;&lt;/span&gt;》和《&lt;span  style="font-family: Arial; font-weight: bold; line-height: 25px; "&gt;&lt;a id="cb_post_title_url" href="http://www.cnblogs.com/wuhuacong/archive/2010/03/26/1697005.html" style="color: #223355; text-decoration: underline; "&gt;淘宝API开发系列--商家的绑定&lt;/a&gt;&lt;/span&gt;》等文章，近期由于一客户需要一些淘宝API的例子，而我原来开发的例子已经过去两年了，之前我是基于一个中间组件top4net来进行开发的，这个模块就是在淘宝API SDK的基础上做了一些封装，不过原来的例子确已经不能运行了。&lt;/p&gt;&lt;p&gt;因此重新捡起行头，继续研究有啥变化的地方，不过发现虽然时间过去已经快两年了，淘宝API的使用模式，一直没有变化过，可能变化的就是API的一些细微的地方吧，因此这次，就摒弃了中间组件的方式，就直接使用淘宝官方提供的taobao-sdk-net.zip(http://dl.open.taobao.com/sdk/taobao-sdk-net.zip) 来进行开发，发现其实模式一样，操作也差不多而已，但是处理起来的细节有很多不同的地方。&lt;/p&gt;&lt;p&gt;为了进行淘宝的API开发，首先我们需要做下面几件事情。&lt;/p&gt;&lt;p&gt;1）&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;开发者注册一个账号，&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;2）然后为每个淘宝应用注册一个应用程序键（App Key)&lt;/span&gt;&amp;nbsp;。&lt;/p&gt;&lt;p&gt;3）下载淘宝API的SDK并掌握基本的API基础知识和调用，具体可以参考论坛的信息（&lt;a href="http://dev.open.taobao.com/bbs/forum.php"&gt;http://dev.open.taobao.com/bbs/forum.php&lt;/a&gt;&amp;nbsp;）里面的技术分享区等。&lt;/p&gt;&lt;p&gt;4）利用SDK接口和对象，传入AppKey或者必要的时候获取并传入SessionKey来进行程序开发。&lt;/p&gt;&lt;p&gt;5）利用淘宝平台的文档中心和API测试工具，对接口进行测试。从而了解返回信息，方便程序获取。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以上是一般淘宝API应用开发的关键流程，其中通过淘宝文档中心和API测试工具，进行概念了解和接口信息查询很重要。因为这些数据就是我们需要在逐步显示出来的。淘宝的API很多，不过都分为了好几个领域，慢慢就会了解深入了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoDoc.png" width="648" height="541" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;然后我们也可以通过淘宝平台的API测试工具来了解返回的数据信息，每个淘宝API最下面一般都有一个API工具的内容，如下所示。其中我们选择【API Tools在线测试工具】就可以测试返回的接口数据了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoDocAPI.png" width="835" height="157" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoAPITest.png" width="1002" height="619" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;对于以上这些淘宝API接口，不需要Session就可以访问的，就直接利用【系统分配】的内容就可以访问并获取到数据了。注意其中红色圈中部分即可。&lt;/p&gt;&lt;p&gt;对于有一些用户方面的私密数据，如交易数据，买入或者卖出的数据，我们就要自定义指定自己的SessionKey了，如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoAPITest2.png" width="1033" height="500" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;卖出的信息，也需要传入SessionKey的信息，在程序中处理，得到下面的结果。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/SoldOut.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2344703.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/laov/archive/2012/02/09/2344668.html</id><title type="text">ASP.NET——反编译看前后台页面的父子关系</title><summary type="text">新建了一个asp.net网站，我们会看到目录中有如下文件我们会看到default.aspx以及后置代码default.aspx.cs。为了学习讨论和大家的方便，可以先在default.aspx中插入一个input,在default.aspx.cs中插入查找dll路径的命令。如下default.aspx中代码&amp;lt;body&amp;gt; &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt; &amp;lt;div&amp;gt; &amp;lt;input type=&amp;quot;text&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt; &amp;</summary><published>2012-02-09T15:02:00Z</published><updated>2012-02-09T15:02:00Z</updated><author><name>weifield</name><uri>http://www.cnblogs.com/laov/</uri></author><link rel="alternate" href="http://www.cnblogs.com/laov/archive/2012/02/09/2344668.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/laov/archive/2012/02/09/2344668.html"/><content type="html">&lt;p&gt;新建了一个asp.net网站，我们会看到目录中有如下文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/352072/2012020922100715.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们会看到default.aspx以及后置代码default.aspx.cs。&lt;/p&gt;&#xD;
&lt;p&gt;为了学习讨论和大家的方便，可以先在default.aspx中插入一个input,在default.aspx.cs中插入查找dll路径的命令。如下&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('ae42d683-fb18-4314-8138-a90196fb5c73')"&gt;&#xD;
&lt;div id="cnblogs_code_open_ae42d683-fb18-4314-8138-a90196fb5c73" &gt;&#xD;
&lt;pre&gt;&amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;form id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;form1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;div&amp;gt;&lt;br /&gt;        &amp;lt;input type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('5ef2cd9b-b034-4254-b386-aedd4fdb2e11')"&gt;&#xD;
&lt;div id="cnblogs_code_open_5ef2cd9b-b034-4254-b386-aedd4fdb2e11" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; _Default : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Response.Write(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.GetType().Assembly.Location);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;运行编译网站后，default.aspx.cs会编译成.dll文件，同时浏览器中会显示出dll的路径。我们用反编译软件Refleter打开这个dll。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/352072/2012020922413573.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;展开左侧，我们就能看出来，&lt;/p&gt;&#xD;
&lt;p&gt;①default_aspx为原来的前台页面default.aspx；_Default为default.aspx.cs页面。&lt;/p&gt;&#xD;
&lt;p&gt;②default_aspx的Base Type为_Default；_Default的Base Type为system.web.UI.Page&lt;/p&gt;&#xD;
&lt;p&gt;我们可以得出：1&amp;gt;后置代码default.aspx.cs为default.aspx的父类；2&amp;gt;Page为default.aspx.cs的父类&lt;/p&gt;&#xD;
&lt;p&gt;我们再看右侧：&lt;/p&gt;&#xD;
&lt;p&gt;①从第一行可以看出default_aspx继承父类_default，并且实现了IHttpHandler接口。&lt;/p&gt;&#xD;
&lt;p&gt;如上就是，default.aspx和default.aspx.cs的关系。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;而对于上面的接口，IHttpHandler，请见下一次详解。。。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/laov/aggbug/2344668.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/laov/archive/2012/02/09/2344668.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xalion/archive/2012/02/09/2344641.html</id><title type="text">使用delphi 开发多层应用（八）客户端更新数据到kbmMW服务器</title><summary type="text">上次写了从kbmMW服务器给客户端返回数据，我们实现了数据的查询功能，但是当客户端对数据进行了增加、更新、删除的操作，我们必须把这些操作返回到服务器端，并对后台数据库进行更新。kbmMW 可以很方便的实现这一功能，今天就做一个更新数据到服务器的例子。 还是在昨天的基础上，我们要把客户端的信息更新到服务器上，首先需要在服务器端的Tkbmqueryservice 设置允许客户端更新的权限，如图即把allowclient 开头的几个属性都设为True;同时为了保证客户端可以插入数据，要设一下TkbmMWIBDACResolver的insertkeyfields 为 True. 这样服务器端就可以了.</summary><published>2012-02-09T14:32:00Z</published><updated>2012-02-09T14:32:00Z</updated><author><name>xalion</name><uri>http://www.cnblogs.com/xalion/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xalion/archive/2012/02/09/2344641.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xalion/archive/2012/02/09/2344641.html"/><content type="html">&lt;p&gt;上次写了从kbmMW服务器给客户端返回数据，我们实现了数据的查询功能，但是当客户端对数据进行了增加、更新、删除的操作，&lt;/p&gt;&#xD;
&lt;p&gt;我们必须把这些操作返回到服务器端，并对后台数据库进行更新。kbmMW 可以很方便的实现这一功能，今天就做一个更新数据到&lt;/p&gt;&#xD;
&lt;p&gt;服务器的例子。&lt;/p&gt;&#xD;
&lt;p&gt;还是在昨天的基础上，我们要把客户端的信息更新到服务器上，首先需要在服务器端的Tkbmqueryservice 设置允许客户端更新&lt;/p&gt;&#xD;
&lt;p&gt;的权限，如图&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="data:image/png;base64,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" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;即把allowclient 开头的几个属性都设为True;&lt;/p&gt;&#xD;
&lt;p&gt;同时为了保证客户端可以插入数据，要设一下TkbmMWIBDACResolver的insertkeyfields 为 True. &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="data:image/png;base64,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" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样服务器端就可以了，现在编译并运行。&lt;/p&gt;&#xD;
&lt;p&gt;在客户端，我们放置一个TDBNavigator 和一个按钮。如图&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="data:image/png;base64,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9etTqZXNjr1Tp07NzMxEno/ynWaCOlSrbdu2rVmzZmho6NKlSwsLC6nUanFx8cSJE2LJiRMnIlQm2VpdvHhx69atJcHg4OBvf/vbubm5Uqk0Pz8fp1Y9IZ3z9pKNvampqRdeeKFUKm3evDnOBkvqT+7cuXNjY2MvvvhihE488VqtX7/+xYXlItEAAAmgSURBVBdfHBsbix9+idTKpz6Zir2DBw9OT09Hno8mAfP73//+zTffzFqtFhcXd+3atWbNmjVr1kxMTMzMzMTsyiPXamJior+/f8+ePVYF9u7d29/fv3v37gj1SapWCwsLW7ZsKZVKQ0NDv/zlL3fv3v3ss8+WSqVNmzaNj4+XSqXZ2dk4tepajvTeeXtJxd758+d37969d+/ey5cvz87Oph57U1NT4+PjExMTFy9enJmZyUjszczMXLx4cWJiYnx8fGpqKvKskoo9r/qkGHsjAiv2bNH2diZeK4cUa2V76623isWiNVCI3I8nXqvFxcWxsbE1a9asXbv2wIEDFy5ceOedd9KKvTNnzqxbt66/v79UKu3Zs6e/v3/dunWnTp26cuVKtDFf/FqdOXPGGiGcPn16enr68uXL586d27Fjhz3yu3jxYpxa9YRejb0LFy7s3r17+/btk5OT09PTU1NTr7/+eoqxd/78+fHx8ZGRkcOHD09NTS0uLp48eTIjsXfy5MnFxcWpqanDhw+PjIyMj4+fP38+rVr51CfF2DvgLdreToVrZbEy7+23356cnBwaGnr99ddTHMG88sorQ0ND4+Pj165ds8Z569evP3z48PT09DvvvBPt8F5S79Wvf/1rK/mszDtx4sTMzMzVq1ejzS1+rY4ePVoqlSYmJqanp9999925ubm5ublyuWzHXoSdHMReIDFj78KFC8PDwyMjI7t373755ZcPHjz4q1/9at++fWnF3vnz5wcGBgYGBsbGxvbt27d///6XX375pZdeykjsvfTSSy+//PL+/fv37ds3NjZmVTVC8iUVe171yeZoL9rezk6P9lKs1XIj806cOPG73/3u0KFDY2NjcZIvkR13Tz31VH9//3PPPbdmzZqRkZE333xzenp6dnY2xTC2zM/P/+IXv7Bib8eOHZcvX37vvfdSrNWpU6esoeelS5esDwSlVsRep8Qf7c3Nzb366qvDw8NbtmzZuXPnzp07d+zYkeJob25u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" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过TDBNavigator 可以把对数据更改保存的客户端，再通过"更新到后台" 按钮把数据写到服务端。&lt;/p&gt;&#xD;
&lt;p&gt;同时，由于我们使用的是直接sql 语句读取数据的，因此，为了能够在服务器端更新数据，必须提供两个&lt;/p&gt;&#xD;
&lt;p&gt;参数，一个是tablename, 一个是keyfeilds. 所以我们更改一下读取数据的过程：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;procedure&lt;/span&gt; TForm2.Button1Click(Sender: TObject);&lt;br /&gt; &lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;br /&gt;    kbmMWClientQuery1.close;&lt;br /&gt;  kbmMWClientQuery1.Query.Clear;&lt;br /&gt;  kbmMWClientQuery1.Query.Add(&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;select * from RSSJ&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;);&lt;br /&gt;  kbmMWClientQuery1.KeyFields:=&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;XH&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;;  // 设置主键&lt;br /&gt;  kbmMWClientQuery1.TableName:=&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;RSSJ&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;;  // 设置表名&lt;br /&gt;  kbmMWClientQuery1.Open;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;这样，我们就可以先读取数据，然后编辑数据，使用TDBNavigator 确认更改，最后再更新到后台服务器及数据库服务器，&lt;/p&gt;&#xD;
&lt;p&gt;kbmMW 会根据更改的delta&amp;nbsp; 自动生成更新的sql 语句，然后写入数据库。把客户端的数据变化更新到后台非常简单，代码&lt;/p&gt;&#xD;
&lt;p&gt;如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;procedure&lt;/span&gt; TForm2.Button3Click(Sender: TObject);&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   kbmMWClientQuery1.Resolve();&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下图为运行结果&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="data:image/png;base64,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cnl4eNj1RVgjAACAbsGxxgcPHjx8+HCdoVQqbWxslEold02hUCgWi7BGAAAACcexxtXVVcf8AigWi7BGAAAAycexxrW1NdEIXTtkgTUCAABIOI41ii5YKpWcfz3AGgEAACQcxxpFC/QD1ggAACDhONa41A52LJ03AAAAAD2EsLQ4rPE3ysw3+O1vfzs2Nnb8+PHjx4+/2OC4jJMnT46Njf0WAABA93FPgRCWFoc1qkj38Nlnn508edL5jjSYe/funTx58jMAAADdx+95FhcXl5aWVlZW1tbWCoWC88VhCEuLwxo/V8YNb2lp6Uc/+lGxWCoWi4XC9rK+XmCXtbX11dXV1dWHL730UlsXkQEAABjKAxnLDVZWVpxH3jj3o5K2xvs8S0tLzg/OH2Curq7eF1hZWTlx4oTzsFe//3J19eHS0vLy8spPfvKTFQAAAN3H6uqqc3ZYKBRWV1ed/ovuc23Ms0bHF3t7e9fX1/2scW1tfXX14fLyinRZWlr+fPH+0tISrBEAALqT1dXVUqn0la98xXFHs63R8cUvfelLfX19Ada4+nBteXllaemBdFm8v/TZ7z+HNQIAQNfiWOPjjz/e29vruOOaodbo+OIXv/jFr3/966+88kqANa6srC4tPVhcvC9dfv/7zxcWPrt//z6sEQAAuhPXGp955plMJsO2XTTMGguFwhNPPPHkk0/29/efOnUqwBo//fS32Wx+dnZOukxPz966PXk3m4U1AgBAd+JY45e//OX+/v433njDaTJlpDU6Z41PP/300aNHz58/H2CN8/P/786du5OTM9Ll9u2pGzdu3rlzF9YIAADdiWONX/3qV0+ePOk2JTbSGt3vGg8ePDg6Ohpgjdlsfmpq9ubNCely/cata9euz87egTUCAEB34lhjKpUaHR01+7tG9g7VkZGRAGu8cyd769bkJ5+MS5dr165fvnx1enoW1ggAAN2JY41Hjx5Nwh2q7JXVgL9rvHlz4qOPPr58+ap0+fWvr4yOjk1OTcMaAQCgO0na3zUGs7KycuLEiQ8/vPyrX116/4MPJcv7H7733ujFi7+amJiENQIAQHeyymOSNS4r4z715+HDh7/4xS9u354aH79948bNgOXKlWuvvfbaQwAAAF3PGuOL1K1RdPXVVqytrd26detVBV5//fULFy50HgAAAAD6rLeC9UXS1hjPM2db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" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;为了更好的说明这个问题，我们再客户端分别作增加，更新，删除三个操作，然后更新到后台，&lt;/p&gt;&#xD;
&lt;p&gt;同时在服务器端使用devart 的dbmonitor 来检测一下，看看服务器是怎么生成sql 语句的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="data:image/png;base64,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Zul4f9TwQ+uQetWQa8kay90fSPCEkUftUps/jyJoWQ8FINYS64zLB6FfUTqpqOleIWnWrLuSzKymbJlPj+ab/VB5PgiWeg3Si7ZTmU7kGpHqRam5aZxwh9kyEaAXE70XohfPuXfbOfduo3oRAMATMIoDAMBUkCfAesjUftC9T+N2T/Xi2fdsO/uebX+4dssfroVeBMALeZobgGkL/Wxl2APSLTtTTkkqxD3n2Tua4veAenX7ivYjJyF68dotf7g2SC+edc+2s+7ZNvPaLTOhFwEAAAAAKkKAXkz0XohePPPubWfevW3mtZtnXrv5IJUHAAAAAAB0lyC9uHnmtZuD9OJd75951/vQiwAAAAAAFaKnenH2Xe/Pvuv93/998+//Dr0IAAAAAFANAvRiovdC9OIZd75/xp3QiwAAAAAAVaKnevH0O98//c73f/f3zb+DXgQAAAAAqAgBejHReyF68bQ73jvtjvd+d83m310DvQgAAAAAUA1C9OI1m393TZhevP29026HXgQAAADAtKEvfpGxp3rx1NvfO/X29357zebfWnpR2wPH3CCnRn76U9tenbnKzGlZKJrfsQcdNeU27iogewU522f7AeacnV77AbZaZoN3pYjsRlWev8Hr3vEsaAtaAACoGF0MywFBtXwE6MVE74XoxVNue++U2zi92Ii0PZvbm3Ibu3q30v/rIx25yjRJLBTLr92ZZqemnMa5s+7tiqyzWofizJcctjUdZ31S+glrS4Sss3TLuiUcW3n1WJ34BQAAB4Muh2XoxaJ68eTbtp5829bfXr3pt1dvErIkNaepJa+93mmqbME3v67YHNpO3hze2Bme5ic2jfyyXqxO31I428JZ82JKX8EXidnYPorqyd/tc+33GjHd2L6+HkXafcwqNSYdjb/tmfHEbDOu1+NYn/KV0g17+h36rhUBAH1Et8KyGZBz4m3JFxJD9OLVm3579aYQvXjSrVtPunXr/1696X8lvZir1Vi54FYhrDLLz6/P48kiRZaL/KCY5c9murUVbV0vWr1GpZSxG7lxKm+25nNT+gpuqq8RpXqrPRWoukcjqqn/tAWdkE7Xo/X+lfVDosXZ/p5kVLpQyUH9djRdK0jOowEAAKWhO2FZXeSY+zBUQalnRgL0YqL3gvTiLVtPusWhF9m12ly9mA19SprX41hWGN75jc97SR+8o/OUjkZmz3pdYvhUNb0Evegm5xUoiUyS/iuUXrPfQsxOrr80cxl0XWi9TLnTaaEAAKDEdCcst1rtQbyRvVGL8ZY9WyZ6qhdn3bJ11i1b/+eqTf9zFdWLumzyX4+WxJZkoWh+IYU3FSAWRevG2YaepXqjLtaj3TAd4yDpxSwqOeuTnQj00YU03W+aHgAASkV3wnKrZetFd7wtd4QM0IuJ3gvRiyf+490T//EuoxfJ+pT4/Qa7wcTaZSwUzS85x6a5U+hZ9elZdT9zBts8ay7qle+1w43QFtm6Jb7vQj5YzS18BOtFOmuYmde6luGQfUm7exbVi/prEitDAQCgfHQnLLesDwg54y17tkz0VC/+5eZ3/3IzoxetWdh6+nEAa0pWz9b+5IB9lY5toWh+lcC+D1imGOPaoCicpf7pg7PkfRUHWva3jfQlZqutp93v6Rg9JAtI2t/BejGtO/P7Lon5etzk16nbl8TN7GOzyeWF9SL3y1HQiwCA0tNRWLauNN6WxXjLf2qoNPRUL55w87sn3Pzub67a9BtmPRoA0Nf04UdPAQCAUPqV5TAC9GKi94L04k3vnnDTu7+5ctNvroReBGBaoE0vQi0CAKYB0ItKL1656TdXBunF42965/ib3oFeBAAAAACoED3Vi8fNe+e4ee/8+sqNv75y40EqDwAAAAAA6C4BejHReyF68dgb3zn2RuhFAAAAAIAq0VO9GN34TnTjO7++YuOvr4BeBAAAAACoBiF68YqNv74iTC/e0IxuaP7qio2/gl4EAAAAAKgIAXox0XshevHPNzT/DL0IAAAAAFApOtWL9br2s5LJT03KXyP/v+ub/3d985jLNx5zOfQiAAAAAEA1CNCLid5r68VG8utqakM752+s/em65p+ug14EAExDrA3GAADThr74RcZO9WL6c7xqfz5XOPzjdVv+eN0WRi9qe+CYG+RQg43I2D/asXEOuwddkfyOPeioKbdxVwHZK8jZPtsPMOfsNNsPkOs8zL5QUsRhdq2aCvSdsrLdBtNTZC8se/OrJK2hp9D9s8gzkHPTKBKudW271aQ+2OnyU58mkZaytz43toptRIn/+lW0udlLzDZvROTW2g7e5k6MZn1JTUbriu+H1vXchXbd6vMMQmuUynla/6J75XNeMijVvFSE7AnleqzesP6+dd4rHF51gj4OdxhZHV5VR0rqenFkbGJkbGJ4dGxoeHT7R4Pvb9+5dduHza3bV67d6NCLqU6MIqHHZfwx3vLHeMsvL9/wy8s3GCcakbZnc3tTbmNX71b6f/0e5CrTJLFQLL92Z5qdmnIa5866N0ezzpqbAVekbynY1nSc9UnpJyLSp82hJ9UADr2oGZjK7mFsoqrtV91Ob9glpSWydqDWGzu3+PxNmWv56s3xgTjPpDhc5WOOcrwdctx6kb/EKnKdvYqWgbuWqT2zrppxZO4Sbnhr7FCe34dZQVxm52n9S+6V0vkcg0JsZYpgPHHy8+vvW1d6hcOrIJrmcoD5hAeZ6y+9ODbx8eFHHPHH//vzmWefO/vsc2effe418fWPPr5w45b3dL2Y6D3t+y7Zm0BOof8Qb/lDvOWXczf8cu4GIUtSc5pa8oihQhcTLPjm1xWbQ9vJTwx93TTyE5tGflkvVqdvKZxt4ax5MaWvIL2LBMhmuod9rl7UZqriiL6rpz1Tm3jLhLidR7bQErq3FbJ1mW8/U9RzoSyOzF43Zc1y1ZvjAw0CcljwG/PaqQ1hnOPLy1zS0GNKLEmKuGkKAlVbxnDLNJncyiRNy+3Rh+36E951yuO8OtUgXUt6kS2R87kGhf5Mi+CtF3vaK7qtF3krWSRMA2MaS9PZ/nS6yYqxuntGLDX/9lZTU4KlF/987HF33n3v4wuffuzJpx978ukXXn71rSXLbL04d8Mv524wvh/dnrXN098zr90y81qnXszVauILlqxCfEYpJr815S00nuOBcQ+o2kx3FjUMvWj1GpVSxm7kxqm82ZrPTekr7MdH6p8eerHdiYxXY6K29Z5mLLFp2d0WWnndO/1P+0rtT7paZSw6WSNHvn7Kv6l9bc7jb2Ywxzoryolxj9zC4TtdyjYqJPcSFTCdLxWNqFav15lC6jNmtPZ8461ozXRBDalM8Rwz42VxPs3NeG64V0rncw3KDWAXwVcv9rZXdFsvci8AWbhsK1UVBtU0buIxjbFU2zAOl31mJGA9mupFTVY7+f3fN//+75uPnrvhaF4vqr5RSC8a72lpj4tlheGd3+jEbOFoZ3Z0b+ms1yWGT1XTS9CLXjS0TwIX1YtWsLXkkaFBLDtp97OMuC1IRaARkB38HCWlZaHGA25aVC86FJty3pHirRezYYZmkq7hLslc8HipMP/UOgCtvSxbWimslHFYM/w2+56fWCmR87T+WffK6bxk0PlyklMEt16cql7RLb3olteJYPSKeNqcNBtL9Ws9I+0UEbAeneg9sh7t0UK/+/vm3/1989F/23D036he1LuGrLLtriB1KMlC0fxCCm8qQCyK1o2z+vJHOd87nGA92hs6t91qtZxTDi3/qM3mT2OZJUFyBJYAF7KbcZ1bJBUUsBE6c5cFvG/qDgKOgUd8UXSuTfvqxYbxnQkvvShcolz16yTWwFSPm0LtmXUl9EPGmlcfVpXmjpylcZ7WP+deWZ13GhS7OldAP73Y417Rdb2Ys3wfrBcdMrT0o1vAenSi90J+r/t3bFpAbAAAIABJREFU12z+3TWcXmzaa1uqy9jd2G4wsXYZC0XzS86xae4UelZ9elYP9NoMtnlWWzV0P9ilRGiLdinoWZ+UfiJbU0m7t9lf0tYP04t656Fn1eqJ1VXdFlrC08QHvkakJjOskro9t25bRC9mN+WupdVrGGZ9YJ2XPkLg9y6ZGkg7tagXM39zLhGuIh6ajxHpA3rtGVb4VuOsSZVM+55YN+VzntY/416pnXcZNB43RxE89WKPe0WeV/qMA/t/QpP5vgu3Hp2rF41WlmKpksilHt8C1qPD9eJvr9n822s2//ffNvy3qReFFxF7SlbPln7CyrpKx7ZQNL9KYN8HLFOMca1vC2epf/qgLXlf7hcQHlK3xoNK29onpX9g14Ss3m4nuYUUjaRiZ81Ue/t88nVGt4WW9IKU2uT1E7FiPRg1ayo9Oa89FK5HUbopfy1TvULtpT7wVWCmZLVIHCXDn+Ue9T/7kxtC2UvYq2ih7Ku0+Q/OPbucVv9hrZG4J/dhVWlWYvmcp/XvcKlszksG+cfNWQTdAcufKewVkle0sfz0Iu+XfiPdB6oXqQ9S2EhLy8bIUhGwHp3ovRC9+L9Xb/rfqzdRvQgA4GFFUgltgjzyxiYZuvp98K4qCXB+ailnEcrpFUufxlhLL150yaWPPbHwpVdfe/GVRS++sujNt/41sGpN1/Ti/1y16X+u2vSLyzb84jLoRQC8kKe5Q+nTWFZ6rAWuApcFjJJhV5UEOD+1lLMI5fSKp09jbMB6dKL3QvTib67a9JurNv3isvW/uGz9QSoPAAAAAADoLgH7ASZ6L0gvXrnpN1dCLwIAAAAAVIme6sVfX7Hx11ds/Pml639+KfQiAAAAAEA1CNCLid4L0Yu/umLjr6AXAQAAAAAqRU/14jGXbzzmcuhFAAAAAIAq0VO9+MvLN/7y8o0/u3T9z6AXAQAAAAAqQoBeTPRekF6cu+GXczf8bM76n82BXgQAAAAAqAYhenHO+p/NCdKLyc4wP52z/qfQiwCAaUfgTzACAKpNX/wiY4BeTPReiF5Mfumb0YvaHjjmBjk1ElwbEbMFEPtbxuwedEXyO/ago6bcxl0FZK8gZ/tsP8Ccs9NrP0C28zD7QkkRh+6qN1W/7E125WI2e7UKy24JaJfFzlSzLLtuGkXCta6dt5rUBztdfvDTJHb7W73/GrvFNiLXloDOS8zHguyHTTeyM3uZ8Jd+d/c+ckbtyPsusrujqv3axA5cKudp/Yvulc95yaBU81IRsieU67F6w/r71nmvcHgVjD4OdzjyOFyqjpTsqV5Mfun7p3PW/XTOOuNEI9L2bK7HzWzjH3uzR73bkKtMk8RCsfzanWl2asppnDvr3tvIOqt1KM58yWFb03HWJ6WfiEifNsedVAA49OJB6hIBlo19VJO9qPX0hl1Yegt7W1jnTtleN2Wu5Ws4xwfiPJPicJUPO8rxdtRx60X+EqvIdfYqZgte5lqm9sy6asYR2V6ctebTjVlBXGbnaf1L7pXS+RyDQnhlimA8cfLz6+9bV3qFw6viNM21APPxDjI3TfXiup/OWReiF39+2fqfX7b+vy5Z91+XrBOyJDWnqSWPACr0L2kzeM/8umJzaDv5caHvmkZ+YtPIL+vF6vQthbMtnDUvpvQVpHeR6NhM97D31YuaAFL9Kntd17tZ+vIc03htXkAvZ3u4FbJ1pW8/VoLzRoqZ30sv0puyZrkazvGBxgE5MviNee3UhjDO8eVlLmnoYSXmrlJdSHNY1ZYx3DJNJrcySdNye3Rju/6Et+HyOK9ONUjXkt5lS+R8rkGhP9MieOvFnvaKrupF3kQWBtM3+3QFI53qT6ebtJUN41XQDqR5YbZMBOjFRO8F6cVL1//8UqdezNVq4tuVrEJ8higmvzXfLTSe42lxj6baUG2P6+zZLKWM3ciNU3mzNZ+b0le0m1ZfwGH7p0Mt0XWbdhjl3k80OWiPYNb/je7KBeVcvaiu1P6kq1WG89bIka+f8m8qFtCqYfZG5lhnrUzRFMlVZ+vpEtxEHLO0S1TMdL5XNKJavV5nCqnPmNHa8w25ojXTBTWqMsVzrJ2Uxfk0N+N5XdzduCzO5xqUG8Augq9e7G2v6Kpe5NR/Q30cIYuv6QJjraaVVI+NyUVU23iG2TLRU72YfFNG1ouqYxTSi8ZLWtrdYllheOc3ejAbCmhPdvRt6azXJYZPVdNL0IteJNKDXaLN1Yvym7Dd11V/tq5y60V6uVQK9lo6+DkKq9/LNRQVvGlRvehQbMp5R4q3XtTngu1M0jXcJZkLnv3EGKXqcVOovSxbWimslHFYM/w2O56fWCmR87T+WffK6bxk0PlyklMEt16cql7RFb3o1taJYPQKd9qENBtIA8LsFNFTvZh88vGov6476q9UL+r9QlbZdj+QepNkoWh+IYU3FSAWRevGWX3to5zvHU6wHu0NndtutVrO+YaWXCeNyNCL7l6dqxc9q527pBnXuUVSQQQb0TN3ZcD7pu444Bh4xHdF59q0r15sGN+Z8NKLwiXKVb9+0iQTu0LtmXUldEXGmlc3VpXmDp6lcZ7WP+deWZ13GhS7OldAP73Y417RXb2Ys3YfrBcdMrT0o1uAXkz0XoheTJQmoxeb9sKW6i92H7YbTKxdxkLR/JJzbJo7hZ5Vn57Vo7w2g22ezabBc57qUiK0RbsU9KxPSj+RLaik3dvsL2nrF9OLlvRsRPbrqlmX2l/Z3bNEernwQPGxL5WuzdgurFvIWrctohdNvcyN2WZOwzDrA+u89CkCv9fJ1EBa0aJeNNrEdYlwFfHQbH21iMbVnmGFbzXOmlTJVt3yIqKsztP6Z9wrtfMug8bj5iiCp17sca/I80qfdGD/T+9kuG8MxE3r8z4OvWg0sRRI5TBbJnqqF4+6ZN1RnF4U3kLsKVk9W/uTA/ZVOraFovlVAvs+YJlijGsdWzhL/WPey4j35X4B4SF1azyltK19UvoHdkHI6u12krR42jaixR1d7lj3MbuZ+kv/OmNS71aP5QYfyxMycdiO/cQKdd6YTU/Oa8+F62mUbspfy9Swfo7xwVmDmi63mpLzhnPP9SEBbghlL2GvooWyr9KmQDj37HJaXZG1RkKf3I1VpVmJ5XOe1r/DpbI5LxnkHzdnEXQHLH+msFdIXtHG8tCLvFP6XXQHqF6kDkgxwx1my0Rv9eJf1x3113U/+eu6nzDr0QAAAquQQDVxjk1O6Or3wbuqJMD5qaWcRSinV5Q+jdsBejHReyF68ScXr/vJxet+cvHan1y89iCVB4A+Q57mBpXDWuMqcFnAKBl2VUmA81NLOYtQTq8YoBeVXrx47U8uXhuiF3988Vp1HKTyAAAAAACA7hKgFxO9F6IX//Oitf95EfQiAAAAAECV6Kle/I8L1/7HhWt/fNHaH18EvQgAAAAAUA1C9OJFa398UQd6MZllPEjlAQAAAAAA3SVALyZ6L0Qv/uiCNT+6YA30IgAAAABAheipXvzhBWt+CL0IAAAAAFApeqoX//38Nf9+/ppkVfoglQcAAAAAAHSXAL2Y6L0Qvfhv5635t/OgFwEAAAAwbeiLX2TssV5c/W/nrf7RhWt+dOEa44S2B465QU6N/LhtI2L2/2F/y5jdg65IfscedNSU27irgOwV5Gyf7QeYc3Z67QfYapkN3pUishtVubocd63/qb6IhgAAkNHFsBwQVMtHgF5M9F6IXvzBuat/cC6nFxuRtmdze1NuY1fvVvp/faQjV5kmiYVi+bU70+zUlNM4d9a9sZF1VutQnPmSw7am46xPSj9hbfqRdZZuWbeEYyuvHqsTvwAA4GDQ5bAMvVhUL37/3NXfP3d18i1pIUtSc5pasqqSr1maKlvwza8rNoe2o6bSlGZcZ5Sdyk9sGvllvVidvqVwtoWz5sWUvoIvErOxfRTVk7/b59rvNWK6sX19PYq0+5hVakw6Gn/bM+OJ2WZcr8exPuUrpRv29Dv0XSsCAPqIboVlMyDnxNuSLySG6MUL1vzogiC9+L1zVn/vnNXJt6T5HLlajZULbhXCKrP8/Po8nixSZLnID4pZ/mymW1vR1vWi1WtUShm7kRun8mZrPjelr+Cm+hpRqrfaU4GqezSimvpPW9AJ6XQ9Wu9fWT8kWpzt70lGpQuVHNRvR9O1guQ8GgAAUBq6E5bVRY65D0MVlHpmJEAvJnovRC9+9+xV3z17lawX2bXaXL2YDX1KmtfjWFYY3vmNz3tJH7yj85SORmbPel1i+FQ1vQS96CbnFSiJTJL+K5Res99CzE6uvzRzGXRdaL1MudNpoQAAoMR0Jyy3Wu1BvJG9UYvxlj1bJqZCL56/5ofnU72oyyb/9WhJbEkWiuYXUnhTAWJRtG6cbehZqjfqYj3aDdMxDpJezKKSsz7ZiUAfXUjT/abpAQCgVHQnLLdatl50x9tyR8gQvXj+mh+eH6QXv3PWqu+ctSr5FUbjBFmfEr/fYDeYWLuMhaL5JefYNHcKPas+PavuZ85gm2fNRb3yvXa4EdoiW7fE913IB6u5hY9gvUhnDTPzWtcyHLIvaXfPonpRf01iZSgAAJSP7oTllvUBIWe8Zc+WiQC9mOi9EL145FmrjuT0ojULW08/DmBNyerZ2p8csK/SsS0Uza8S2PcByxRjXBsUhbPUP31wlryv4kDL/raRvsRstfW0+z0do4dkAUn7O1gvpnVnft8lMV+Pm/w6dfuSuJl9bDa5vLBe5H45CnoRAFB6OgrL1pXG27IYb/lPDZWGnurFb5+58ttnrmTmFwEAfU8ffvQUAAAIpV9ZDqOnevFbs1d+a/bK5Fe7D1J5AAClQptehFoEAEwDoBdTvZjoPehFAAAAAIBpQU/14hFnrDzijJU/OG/1D6AXAQAAAAAqQoBeTPReiF48/IyBw88YSHYFPEjlAQAAAAAA3SVEL567+gfnBunFb54+8M3ToRcBAAAAAKpET/Vi/bSB+mkDyS7SB6k8AAAAAACguwToxUTvQS8CAAAAAEwLOtWLk0X4xqkrvnHqiu+fs/r750AvAgAAAABUgxC9eM7q75+T6sVtKR948PVTVnz9lBXfO2f196AXAQCAwdqHDABQffriFxkD9GKi99p68cOUj0x27do1ODi4b9++4eHh0dHR8fHxwcHBr52y4munrPjeOau+d84qwwttDxxzgxz6G7+NyNg/2rFxDrsHXZH8jj3oqCm3cVcB2SvI2T7bD9DrrNbWLdf2jJWH6zzMvlBSxLHSSx6Y9A21sk0J01Nkyyx7j6wkraGn0G22yKOSc9MoEq517c7VpD7Y6XJwSJNIS9k7pBs7yjaixH93c7OXmI9XIyK31jb6NjdsNOtLajJaV3w/tK7nLrTrVu2nxrdt6Zyn9S+6Vz7nJYNSzUtFyJ5QrsfqDevvW9Fe0Tn6ONzhK5wjLJc8YmsE6cVV3ztnVVsv7jHZm7Jv376hoaFELI6NjSV6ccbJK2acvOK7Z6/67tmmXmxE2p7N7U25jV29W+n/9S5BrjJNEgvF8mt3ptmpKadx7qx7czTrrLkZcEX6loJtTfdZ2tZ9POUSkT5tjinp4N4ferFl7bWqbWvdTm/YFUJLZG1UrfeN3Frib8pcy7dCjg/EeSbF4SofmpTj7ciU19zcJVaR6+xVtAzctUztmXXVjCNzM3HDW2Mj8/yuzgriMjtP619yr5TO5xhkgzhbBOOJk59ff9+K94pOaJrz/OajG2RuWurFRO+19eK+lKGhoWQecXR0dGhoaP/+/cPDwyMjI6ZeXD7j5OWMXsxIak5TS15jIdt3BAu++XXF5tB28qNA3yON/MSmkV/Wi9XpWwpnW3i1tTnT2G+Q3kUiXzPdw95fLzbjej2O9ZnbpjGRppRHHNF39bQDW/npTJnbQkt4CqyBRH9jsB89roB2ipnfSy/Sm7JmuVbI8YHGCjl6+I55jSiZsGFHX768zCXqr0ZUi2JJUsRNUxCo2jJEANNkciuTNC23R1e360/QBeVxXp1qkK4liK0yOZ9rUOjPtAjeevEg9ooO4ONIFuLSiJcGyXQa3xVsm4YF7m8aQstEN/Xi+Pj4oYcemkhGVi9+9aTlXz3JqRdztZr45iSrEJ/hh8lvzbALjed4EtwjpTbTnYUDcz7N7DUqpYzdyI1Tefu0tb4q0IfTjO3i6YszbP8sqheVyaQv6x0sma813qCJcKf5iUctt4WWn15UV2p/2hViLTpZI0e+fsq/qX1tTpQwM5hjndVNaYrkqsN3upRtVEjuJSquOt89GlGtXq8zhdRnzGjt+YZl0Zrpghp5meI5dEFZnE9zM54b7pXS+VyDcgPYRfDViwe3VwTDKfssDraFsYpvan7WEWwtbcPUj3uea+rpsl781Kc+dfTRRyeSkerFr8xa/pVZy79z9qrv8HpRNXohvWi8gKVdKZY1ind+o3eyjzntpe5+K61F5F9i+FQ1xdQNvagvVFet/J4ksoJdfg3Ti5b0sScJyPyHoUGs26W9VM9G72JZkEpKAyU7+DkqxHLDURuFblpULzoUm3LekeKtF7XVQs/5Rf6SzIVCfaltLu0AtPaybGmlsFLGYc3w2+x7fmKlRM7T+mfdK6fzkkHny0lOEdx68WD3ilBydHMyEnmFMi3YskFSv9YzhE4RAXox0XuiXvz9738/e/bsiYmJsbExSy8eNmv5YbOWf+esVd85i+pFvc1llW33JKmnSBaK5hdSeFMBYlG0bpzVx/Vyvnc46Xg9Wh+nq1f8ItC57Var5ZxLaAn1FqAXXd0+zW9JkByBJcANJM24zi2SCkLZiLC5qwfeN3XHCsdwKL5POtemffViw/jOhJdeFC5Rrvr1pSaZ2BVqz6wrobsy1ry6uqq0PF1QEudp/XPuldV5p0Gxq3MF9NOLB71XhJKzLh+sFx0ytPSDW4hePGvVd84S9OJnPvOZc8455+GHH3700UcnJiYsvfjlE5d9+cRljF5s2otWqi/Y/dNuMLF2GQtF80vOsWnuFHpWfXpWj+DaDLZ5VlsOdD+xpURoi2yxNLetzTnhihU/lzoRw2Z/SVtfjCZGxGyqhRKHXlSLJvQuCmf+toduCy3hoePjYyNSkxlWhbi1rHXbInoxuyl3LW0FwzDrA+u89LLj98qZGki7vqgXM39zLhGuIh6aD5vQZ7J5Z0d/k6xJlUz7nlg35XOe1j/jXqmddxk0HjdHETz14kHuFbp56f8CTeb7Ltx6dK5eNJpPCpJK+5Z6eOuyXjz88MPnz5+/fPlydn4x0YtHnrXqSFMvCm8Y9pSsni396JR1lY5toWh+lcC+D1imGONWp2XOUv/00VjyvtwvIDykbo3HNb+ttYQqFj8HdrGH1IDVjcikmmWD1YvW5TS+i306E/ft88nXGd0WWtJ7VGqT10/EivX8WDOj7fPas+N6YqWb8tcyraCfY3zgq8BMyWqROEqGP8s96n/2JzeEspewV9FC2VeROWnzarucVv9hrZHwKHd1VWlWYvmcp/XvcKlszksG+cfNWQTdAcufnvWKDvQif0Pdeb3IVC9aV+oZjMrNisEGv1IRoBcTvcfrxSiKFi1aJH1+8Ut/Wfalvyw78qyVR561cqoLDkAVYNVPb0x18dbAG7+BjIOufh+8q0oCnJ9aylmEMnjVp8EzSC+uPPKslbxevPrqqx3fjz70hGWHnrDsyDNXHnkm9CIAXsjT3AWBXqwG1jpYgcsCRsmwq0oCnJ9aylmEUnjVp8EzRC+eufLIMzm9mPv7i188YekXT1j67TNXfht6EQAAAACgIgToxUTvMXpRh9WLXzh+6ReOh14EAAAAAKgSnerF/QK6WLT04rdmr/zWbOhFAAAAAIBqEKAXE73X1osjMrpYTPTi549b+vnjoBcBAAAAAKpEp3pxsAifO3bJ545dAr0IAAAAAFAhOtWLn42W+B+HHLvkkGOXHDF75RHQiwAAAAAAFSFALyZ6L0QvJscRZ6w84gzoRQAAAACAahCiF89YecQZqV5c3Pyk6HHEGQNHnDEw1QUHAAAAADj49MUvMgbpxYEjzhgI0Ytvbpl8c8vk4WcMHG7pRW0PHHODnBr54dpGxOw4xP6WMbsHXZH8og+cKbdxVwHZK8jZPtsPMOdskbboA7jOw+wLJUUccYO4UsJ6y26fVbOS9Gu4B09VVxTZ+weae5m50+UnOk2ie+vpORmPiIfG1rh6J093S9MKTDauLkKYfXtHO7NXCn/pLeveUM6oOHkDRraFmc4RXDuVLmapnKfdTHSvIB0XsyP0cbjDkcfhUskjtkaAXkz0Xlsvzp4zz/NY3PzkjS2Tb2yZPPz0gcNPN/ViI9L2bK7HzWxHH3vLR/2pIVeZJomFYvm1O9Ps1JTTOHfWvWmRdVbrUJz5ksO2puOsT0o/EZE+bQbYdEDvb72o1UHNSrF2PGnG9fb21YJZz9Cshwa7CWiK4D/N6dlM5Pr2vhRW6ZpxvV7vpEHD7Ksnzog3zLXWn+m7rX5NRPYZZ635dHtqp7N4WOlilsh52s0k94rTSTE7wYo6ZhQIMjc99eLpA4efXnx+cfaceW9snnxjM6cXM5Ka09SS11jIPl7SLu+e+XXF5tB21BT/RJL8xKaRX9aL1elbCmdbOGteTOkrSO8iAZaKqhY5y2WO9VnZdki1UpI81nRG2oGt/HTSzW2hxT0FuXpRTYMJD76KEYbdAL1ojES0CYRHntGL5EEuohfbzd1IzzbjuvZXI6pFcfE+bweT4vZVu1hCXa95K1pnTysxx5WdtKNHt7crO0iK6JVT6WKWx3l1qqEZ4dzzpTtt1BG8iSzEpREvDZLp1L0r2DYNC9zfNISWiZ7qxdc3T76+efKbpw98U9KLuVpNfAeSVYhXQKf5rXlwofFkucjrRePpousResCweo1KKWM3cuNU3mzN56b0Fe2mVcWS+mdRvahMqhk7oze145s2822KcpqfeNRyW2iF6MX2FaIsS09YI5elF6V1PGtUtp4ua5WWXYQircA0H3t3ZxSpWaOj3uJ8f7BwvHwG2E+rp15ngq8+lZQmZCOib4gWrZkuqFGYiX6CjCpWOZUtZpmcV/VKPa+zuzn3pI3YKvOGk7lZHGzLV+Wnmml1BFtL2+hBMlMFpZ4ZCdCLid4L0oubJl/f5NCLqvEL6UXjHSN92mJZYXjnNx5gVqPQB9n9vsue9brE8Klqegl60YskhPILmkF6kb7omxHYngywwjfN3zSz0bs4BoBcb62xUtKL1nxGkzPrCLX0RlY1W47TFMm4q/nyvGpERM9pd+585Aizz7ZU21zaGfTGsrtZWtesQHFYM/w2+6Eg9zui0sUsifPqv+6Xw2DCitnZPXMkdSIYqeZzB1s2SOrX+oTQqaOnevG1TR+/tunj+mkD9dOoXtQfC1llM6OIFLxZC0XzCym8qQCxKFo3zurjejnfO5xgPdobOrfdarXygmC39KKr26f56SKRj0or5K0jm2Pq0F8vZqFZegl0rk27illE1ltX0Skc5SH/1DinZzq1zzjM1LyWoRnX03VtTseTW3Dt6NPtVVu4J938K6e6xSyT88pnx6y/QW/aqCNyluyD9aJDhpZ+dAvQi4neC9GLizZ+vGgjpxeb9qKVvvgkvtyTq3QYC0XzS86xae4UelZ9elaP2toMtnk2mwaXx7nyIrRFtlhqpfmk9BPZQouuioxw455nMoJ0Uy2UOPSiWjShd1E48zeZVWNiocU+PXne0rtnls321y0V1YuWVasJaArvvnBtEb2YGkiLliudfdCqvYh9s7WMnFzNkzbK5qBd7yqCNa7bW1JA5exobtHqkxUrZinbiHYzxr0idKmNjLzS/x0uGPcxBmI7cDn0ouGhFCTV60Gpx7fu6MVazRaONMWhF4X3GPu1Q8+WfnTKukrHtlA0v0pg3wcsU/wbD1n4Ns9S//TRWPK+3C8gPKRujceVtrVPSv/ALpFavd1OYj7uY9pg9aJ1uRXNLSPc7VQztL+M6LbQEl7S3N7SPGQtNUUbT63y6s+bOPAkGa2iZn6bKVnRZUfViMrdnR07LcnLTk92oheL2fdf4ifz0y27NYzyW31Jbke/bm/NThWMCQ4tUoFilrKNaDfjXfKmW23UgV5ssW2SJZGlZEsvWlfqGYx6b/vLtEL5hvquzS/Wavz/db346oaPX93w8TdOW/GN01ZMdcEBqALBAbdzU128NagEdCkelA20USXo0+AZoBcTvcesRycykRWLhl48dcU3ToVeBMALeZq7INCLwEkzZr/KCkoE2qga9GnwDNGLp674xqmcXnSIxUQvvrLhwCsbDkAvAgAAAABUiG7qxdz5xZfXH3h5/YGvn7ri69CLAAAAAAAVIUAvJnov5POLbb14yoqvnwK9CAAAAABQDUL04ikrvn7KipDvR7+07sBL6w587ZQVX4NeBAAAAACoCAF6MdF7Ib+/CL0IAAAAAFA5eqoXX1x74MW10IsAAAAAAFWip3rxhbUTL6ydmHHyihknQy8CAAAAAFSDAL2Y6L0gvbhm4oU1EzNOXj7j5OVTXXAAAAAA9Bhrp73pQV/8ImOQXlw+4+Tlbb04e848z2Nx85Pn10w8z+pFbQ8cc4McutdTI+J2/eIagt2Drkh+xx501JTbuKuA7BXkbJ/tB5hzdnrtB8h2HmZfKCni0E35ytxHzO3y+M066QZfdgaGehS5tgE0TkUNdr9Bktd4urWul+2by9jn7ysHijRJakRjb7RGRPdqY7YgS+uQeuXYLNHYvVa+kU8rU6wddWu1KCY9QapnR7qjlor7UKvV49ja2k4aKzquqOlaIU2187L5MGbZm3GdPMw1+QF3bmxY62jE1MfhDkceR5coecTW6FQv+s8vKr341ZOWf/UkUy82Im3P5nrczHq3veWj3vrkKtMksVAsv3Znmp2achrnzrr3dbLOah2KM19y2NZ0nPVJ6Sci0qchk3Z4AAAgAElEQVTNsJyKk77Ri6Yobj9t7k2TfcpeKCLbbjC7uJs1n2yYra6ti+7pEcduWZoieZhFgORu2h/ctt00UfLK2T30fXeZdumKXlRVTNtOqmex/p21VNQHrRK4rZq7XVHTtEK4Pd+Z4nAPNeeb+cA244h7EIJQwSktYGcDz3TVi4neC9GLz62eeG41pxczkprT1JLXc0hTZQu++XXF5tB2cpDmX8VUfmLT9Tpovp1VpG8pnG3hrHkxpa8gvYuEZUkQ6Ge5zLE+K2u+tauYHkfpu3P2Xq5GDjM/nR1zW2hxT0GA1qF/sunBetExIGruNfRHN3a4p1ujLStEEuKhWklpRFFD+4N5c/Cqw/TWOU9QI9IndzvXi5YQ0fuDbi3xTqpnuf5dtcQ64/CByeZ+pQ+qqGleIQ1ztlLPrM8K+OpFTsF2aYzgrWQhTj1N7SCp1iwcwbZpWOD+piG0THSqF1/fNGkcmydf3zz5hnA8t3r8udXjLr2Yq9UcvdlIcqo9r/xsv5Yc5lJYvWi8ZtFZdT1aWL1GpZSxG7lxKm+25nNT+op206piSf2zqF5UJpO+rHewZP3IeIMmopzmJx613BZaHnpRFc1aQaKFYpeYrOFEWoayTlmVqc+NuGpe+79DH2iRw25ZLkWoFu29M4qb6YDfrmK7ONoapVSHehmlWsqqSpf75EZ2/VgIr8HNuF6vG53BMK5JKFrPcv27aomS44MRbbPJOYGCFYUK0d1Tdzeeu6x7ez7gkh7waYg8OHGcxcFmtqqeuq7+IwVbS9uQ4ufNc009PdWLjVXjjVXjXzlp+Vd4vciu1ebqxSw8q35Sj2NZYXjnN7od+6RwC9Wu7sme9brE8Klqegl60Ytk5E0nFbqgF62Ya2QzJwNaeYpK9VI9G72LZYEtpqQXpfcu/iou3RFhWft0RMmredVEjHuO8Sm7TE5hPUw6Q/t+2R8F5he9yki91UZ9n1bwIRlBY+E13CyCXc+O+nfUUlEfrJy5Je2woqZlhbj1ohi7JB+ylLSvSyKyODkzU4lg9CmCHmzZIKlf6xNCp44AvZjovRC9+Oyq8WdXjX9l1vKvzKJ6UZdN/uvRktiSLBTNL6TwpgLEomjdONtgH7LKgPVob+jcdqvVkgWBftaR2VMvurp9mt8aDzzlWiFvHdnc1orqxSxG628jzppXmSX3DGs6eWvT0qORfmyqGUdxM11WLFqHulc5zdS+KT/hyjtpkfOekPlidzBz9NXr2VX/ci0V9oGruq5VFCrEQy8mClf/sEfOA24+sO44WZCcle5gveiQoaUf3UL04qzlX5kVphdXjj+7cvywWcsPm0W/H23LQGPWV89pNJhYu4yFovkl59g0dwo9qz49qz/w2gy2eVZbDhQHpPIitEW2WGql+aT0E9nLvx6+jXDDzWllGEGzqRZKHHpRLZrQuyic+dseui20hOfCp2g904um47Tm6zH3TSOHe8paM7ZblqYoC9zrZCPSvlaj/xGguXWv5DGpmU1gCtOoRcczVaHZtWlSTof0LZpYS6wzDh8E+5KlwIqa5hXS4OYySUxwzbmS+9qZJU2mvzKx/6dXaKcakTEQ22HWoReNppSCZJLGnS0TAXox0XshevGZlePPrBw/bNayw2Yt051oMp83UK+tWe3p2aIGe5WObaFofpXA9z3TFGNc68jCWeqfPhpL3pf7BYSH1K3xlNK29knpH9i1TKu320lWPTSJDVYvWpfTmC726Uzct88nX2d0W2hJ71GkvNYTUrN+C4Z8wJFd9pLy0JKSlKb20Su+5ovI2dQaXx1mSlaj9Lm2x0LJH6Z90zqkXjXkWrLGcvo5ge7oxXapzZ9HEbSshzwSa4l1xuWD0K8onVTUdK8Q+skWkpnVlC3z6dF8sx8qNltxvWjfMNOJXANRvSg1JY0BaRSwnS/fUB+kF5cdNmtZkF4cGH9mYPywE5cdduKyfNcAAAEjdLdMdfHWAADQarVyFFq/0KfBM0QvnrjssBOD9OLTA2NPD4x9+cRlX4ZeBMAPeZq7INCLYHpBP1sZ1qG7ZWfKKUmFuOc8+4I+DZ5KL46OjQ8Njw7uHdo1uHfnrsF1G5ur1m5avnLdv5avevPtZS8tWqz0YqL3QvTiUyvGnloBvQgAAAAAUCUSvTgxMTE0PDK4d9/O3Xs+3Dm448Ndq9ZsWL5yzb+Wr1z89vJFb/7rxVffhF4EAAAAAJiOTE5O3v/gwzt2fDgyMjI0tH/v3r179uwdHNzz7rtbt2x5Z/OW5qZNmzds2LRu/cZ/LVl+z73zO9KLC1eMLVwx9qW/LPvSX6AXAQAAAACqweTk5D/f+tf9Dzx83Q3z3Mc9985/7vkXBgcHE70XpBeXjy1cDr0IAAAAAFAlJicnt2/fvnPnzn379u3XGB4eTv5VjIyMjI6OdqQXn1w++uTy0UP/suxQ6EUAAAAAgIowOTm5bdu2HTt27N69e4/G3r17k38VQ0NDw8PDg4ODid4L0YtPLBt9Yhn0IgAAAABAlZicnHz//fd37tyZyEF2fnH//iy9G3rxhKWHnrB0qgsOAAAAAAC8mJycfO+993bt2jU0NLTfRKUMDQ0lq9VDQ0ODg4OJ3gvRi48vHX186egXT1j6RehFAAAAAEwH+uIXGd16MWHfPkMvJnqvq3pR2wPH3CCnRn7WU9s6nbnKzGlZKJrfsQcdNeU27iogewU522f7AeacnV77AbZaZoN3pYj83qwAAAD86GJYdm8RWZEQrfSi9X2Xof379+3b12W9+NiS0ceWjH7x+KVfPN7Ui41I27O5vSm3sat3K/2/rpfIVaZJYqFYfu3ONDs15TTOnVU3ZLHOah2KM19y2NZ0nPVJ6Ses7Q6yztIt61XrMAAAMLV0OSxPW714/NIvHh+kFx9dMvLokpEvHL/0C8dL69FJzWlqyWsfd5oqW/DNrys2h7aTN343dn2n+YlNI7+sF6vTtxTOtnDWvJjSV/BFYja2j6J68nf7XPu9Rkw3tq9P/+q76gMAgG7TrbBsBmS6VEhDdHkXEi29ODo6OjExMTExMa4xNjY2PDyi9GKi9w6OXszVaqxccKsQVpnl59fn8WSRIstFfmzO8mcz3dqKtq4XpfXrMnYjN07lzdZ8bkpfwU2ZNqL03bY9paq6RyOqqf/U46Yjna5HQy8CAIAH3QnL6iLH3IehCko9M2LpxYmJiS9/+cuf/vSnP/3pT3/2s5/91re+ddxxx11zzTVjY2Nd0IsL/jWy4F8Ovciu1ebqxUzYKWlej2NZYXjn1z50KH/wjs5TOhqZPet1ieFT1fQS9KKbnFegJDLR4JL8xz8dAACAH90Jy61WexBvpOk1HTVJaU01lvTD+uz84jHHHPOHP/zhvPPOe+CBB1577bWuzS8mevHzxy39/HFUL+qyyX89WhJbkoWi+YUU3lSAWBStG2cbepbqjf9Yj3bDdAzoRQAAmDq6E5ZbLVsvOmRo6WM1/fxiIhnPOuusRx55ZMWKFePj4yMjI/rnFxO9F6IXH3l75JG3Ob1IlsnE7zd4L64xForml5xj09wp9Kz69Ky6nzmDbZ7NpsGr+I0PoS2ybxPh+y7kg9XcwkewXjS+MlbugAQAACWgO2G5ZX1ASBvKjTul38kt4aSiRqIXd+/enfxed8LY2Nj4+Phjjz2WisWhbunF4UfeHv7ccUs+d9wS3QlrFlZ9HMCaktWztT85YF+lY1soml8lsO8DlinGuDY2C2epf7q+lLyv4njP/raRvsRstfW0+z0d5rMPWRJZsyikF9O6s/okAAAABx2FZetKdtGZD9GiRplyEr24d+/e/fv3j6QMD4+MjY1NTEyMjo6qH2JMdnwZHBxM9F6IXnz4reGH3xr+3LFLPnfsknzXAAAAAACqRelXlsNI9OLQ0NDIyMjo6Ojo6OjIyOjIyIiaa1SbAY6MjLT14rFLPndskF586K3hh6AXAQAAANCv9LVeHB4eTsXiiDbLODw8nAnHbujFfw4/9M/hQ45dcgj0IgAAAABARZicnHz//fdHRkbGUkZHx0ZHR0dHx9SMo5KSw8PDg4ODid5r68VCN3vwn8MPQi8CAAAAAFSKycnJbdu2DfsxMjLSoV7c/+A/9x8SLTkkgl4EAAAAAKgGk5OT27dvHyxCovdC9OIDi/c/sHj/Z6MlOHDgwIEDBw4cOPr+CNGL8xfvnw+9iAMHDhw4cODAMT2OIL345v75b+5f3PwEBw4cOHDgwIEDR98fIXrx/jf33//m/je3TL65ZXLKC4ADBw4cOHDgwIHjIB2J3gvSi2/sv/+N/clv6yxufjJ7zjwcOHDgwIEDBw4cfXYsbn6S6L0QvXjfG0P3vTGU/EZjYgsHDhw4cODAgQNHnx2z58xL9F6IXrz39aF7Xx9KftkbehEHDhw4cODAgaMvj9lz5iV6L1wvvrbp49c2fQy9iAMHDhw4cODA0ZfH7DnzEr0XohfveW3onteGFm38eNFG6EUcOHDgwIEDB47+PGbPmZfovXC9+OrGj1+19OJLVx1Sa3PIueuTxIfOnVGzEl+66pBDr3poqqsABw4cOHDgwIGj/46aSSemZs+Zl+i9EL1492v77n5t36sbPn51g6EXj6rNmPVS8v+FRx2zcHEiFjNpuPCoRDJCL+LAgQMHDhw4cBycQ2lEt16kp2jK7DnzEr0XpBcX7bt70b5X1h94Zf0BUy/+6WrjNgs1BfnJ4mY6swi9iAMHDhw4cODAcXAOT7242BSIbM7Zc+Ylei9EL961aN9di/a9vP7Ay6ZevPqYWq1Wqx2zsJ3C6MKFR9X+dDX0Ig4cOHDgwIEDR8HDc3HZXy+qzFK22XPmJXovRC/e+eq+O1/d99K6Ay+tO8B83+X2P7VVI/QiDhw4cODAgQNHNw7/zyMW0ouLnTJ09px5id47CHqx+UlbF2I9GgcOHDhw4MCBo+Oj0FdYuju/GK4X73hl3x2v7Htx7YEX1xp68RCyEk2/73LU7fh+NA4cOHDgwIEDh+9R4+hWZvb/6pg9Z16i98L04t47Xtn7wtqJF9ZO6Hpx1qHKsWxaUf89naNu/2Rx0/jZnZr9FRkcOHDgwIEDBw4cnR7+05COlNlz5iV6L0Qv3v7y3ttf3vv8monn10z4/l435hRx4MCBAwcOHDh6dXT4y4vJMXvOvETvhejF217ee1tRvai+PW19ohEHDhw4cODAgQNHKY8u6MXnVk88t7qAXsSBAwcOHDhw4MBRoWP2nHmJ3gvRi7e+tPfWl/Y2Vo03Vo1DL+LAgQMHDhw4cPTlMXvOvETvhenFPbe+tOfZVePPrhpPbOHAgQMHDhw4cODos2Nx85NE74XoxVte3HPLi3ueXTn+7MrxKVe+OHDgwIEDBw4cOA7Skei9EL34jxf3/OPFPc+sHH8GehEHDhw4cODAgaN/j0TvBenFF/b844U9Tw+MPT0wVuhCAAAAAAAwVUxOTm7fvn3nzp379u3brzE8PJz8qxgZGRkdHR0cHEz0XohevPmFPTdDLwIAAAAAVIre6sXn99z8/J6nVow9tQJ6EQAAAACgGgToxUTvhejFm54fvOn5wYUrxhZCLwIAAAAAVIQAvZjovRC9OO/5wXnPDz65fOzJ5W292IhatVqrVmvV41Yzbv+/Vm+1Wq24nv6ZZmi1Wq1mq14z0hup8ahmXJ6Q2dSOuMmla1cxNCJj/+22N23iepoeRZF2SkpvNbMzyelGy0VWFVErqgvlktJrrbjpsKwVJy1j1Ej+V88uTBOcbnaBbvnTVIaamtmoYTSkdrl+g6xx0gxZa9XjRlSPm1Z/0JuPt2+fS0/ZHUEro3Wq7mjF7jHd6q0q5RWeC4f/B5fpVm9VKa+f/V5E8oTpVm+OfmVZ+v/27rWhiSsPwLifK59k2912u22NVbmIVm2lVlqtCqhEbgFEBRERMIKlRlvt6qZuXet7RBII91tALu377IuTy1wh+TsDHnl+r+okmZwzmUkeZgLNDNZ1/C733+nPF0Evqt4T9eKDpaYHS4MvNwZfbhgmaQqaoKHbgoYcDAWyd4um9wRzDzYlYzqeDgRMK4yH0tn3irTa4Ln15G7KPXBz8VAgt02jwfz2tSw3vlSOyy3r3PK93TjOaDDftY7j32S+bkKBPcZxZsaj9qbs4KLBQGDrkXrDs/FkjnjLirJry70jGO6eX2c8FMhuXMtrbTyyLGvYav358cdDAeN+kh9aNOi2/2zT1k/vvu2myXydj4vNx++r3bbdNJmv2/rdPr98t9u226b7lXFtjo9wmoHttp37fJH04suNwZcbkl5sfLDU+GBp4OXGQPG9GA+ls4Vt6EVzNmXuE03b2yzXT/YHBrcqxez9Da+c4UVwfkXdl1vuU1QvOi53HL99vu4ye1o8FMjvNfFQIBjNjM74366DtPwcU+CPLOonIsuaPRiPkl2B9XDIbHbzARcNBkKh7B1z71OGNyyn0TtP0WH9tvVEDU9lOp5t0zJtBxeebv9dtN0ULebrfFxsOn7HZ9xt+4kn202b+bqv3+3zy+3Ou2s/8Wi7KZvsV5704g5+vrj14srKSiqVWllZsfei6j1RL0aXGqNLd//YuPuHR+cXzf8MBTL3tyeUYy8WdCU6f//8K2fZwsbz2MaHuC03rrOQN6r89WjHS+1v24vZ3cFyxTwYVXuk2scKG2mxnN9fvBtPNLgnGLAdDtnHRo1fElBHX+YYzB1+mxzK7jfa1+9w2GcfbH5rdtoUPl48ctn+u267aTDfzM3ObybO4/eOxvtJ5mZvtts7P1/39W/y+eUdbfcTj7eb637lSS/u4OeLYy8uLy+nUqnKykpjMuZ6UfWepBcboosN0cXIHxuRgnvR+v3FtHsvGpbba8mT84tb/qRlPA/sstxU+AX2onHM9uvRb31+MTc3wyNyP8Jk32f9Ob/o13jy7D9Rmc885G40vUM5vE8ZvjiSf7jTFJ3Wv/nxbPr5z7TZCr1w5PH2T++W7abRfDM3O38eF3qObBfuJ4Zpy7ebNvN1X38hn185u24/8Wi7bTbftMsAiu3FHf18sfeiisUjR46cOnWqvr4+l4y5XlS9J+rF+4sN9xcjL9YjL9YNQzb0ovl7hMbzi4YN4Xw9OverM7lfDTE9yL0XC5R/SYzfFLANzuXtJ7fc8hWaon/Oy22Tzcdf5PXoQChujt3cXhaNqtX4c37R//HYNrHh/cD5TSceCgRDhusg1ofnDzDLR1LuBXZYf4HXC8z/9O00QAF223Z75+frfFy4j3+b7Lbt9o7P1339hX1++Wa3bTdpL9rf1iz339n3SUsvqlg8evRodXV1Z2dnX19fT0+PSsZ8L75Yj7xYl/Ri/f3F+vuLd16s3zH0YjyUbzvjf6cL68XcfSyn2XLXpjMP2qoXLfe3M75yhkv+5kLPvxpuyw3fv44bv4rtKrjH3NOGbbXJ+AvvReNOkz8ibMfPtl2PlozH7TJI2n7cmq59GNdjOGjzZzHT6bTlgN3qfWqT9RfwfWTDbmN+p7Cu1iPuG+693G467yfOx4Xr+L2l8X4i2W567yfO63f5/PKW1vtJ8dutiP0kP7y368Ud/nyx9GIqlaqrq+vo6BgaGnr06NHTp0+fPXv25MmTVCqV60XVe5JevPzT4uWfFvv/t97/v3Xj8vypQUPzGf+ejimYzH8sJhg1LVT3DBr+afkTM9HMRnT4uzObHUC5qje8De0JhGy5b97XHZZnH7vHdU+zCJoHmX2xXcfvOF832ZEEo2nDSedAIGAcdryo8RbFesDJxpN5X7EchvYvbuSXqDvnX1TzE2QOK8f15E8T2wRDruvP/4CaXeC47j3uO5A/fwLD6Q3v/d1u+u4nzsdF7kcp29N6Tdf9RLbd9N1Ptl6/9fPLW7ruJ7LtVuh+kjataevxu50fdd9u2/b54nh+0c54flH1nrwX+56v9z1f3/reQGEKOk+LXY/9BIVgP0EhduF+Ivh7Oqr3JL0YGloIDS30PV/re77m03yw6/h2cQXvFfYTFIL9BIXYlfuJqBfX+p6vyXux9/e13t/pRQAAAD0IelH1nqQX64YW6oYWbv++dpteBAAA0ISgF1XvSXrx0o8Ll35c6PnvWs9/6UUAAAA9CHpR9R69CAAAsCtsay9evLdw8d7CrWert56t+jQfAAAAeEvQi6r3ZL04f/HefPez1W56EQAAQBOCXlS9J+nFC4PzFwbnu39b7f6NXgQAANCDpBd/W+3+TdSLtYPztYPzN2OrN2P0IgAAgB4Evah6T9SLA/O1A/NdsTddsTc+zQcAAADeEvSi6j1JL9YMzNcMzN/4z5sb/6EXAQAA9CDoRdV7sl6cqxmYoxcBAAA0sq29WH13rvruXOfTN51P6UUAAAA9CHpR9Z6kF8/fnTt/d67j6UrH0xWf5gMAAABvCXpR9Z6oFyNz5yNz15+sXH9CLwIAAOhB0Iuq9yS9eC4yd45eBAAA0Mr29uKduXN35q79e+Xav+lFAAAAPQh6UfWepBfP3pk9e2f26q8rV3+lFwEAAPQg6EXVe6Je7J892z/b/uty+6/LPs0HAAAA3hL0ouo9SS/+0D/7Q/9s++Pl9sf0IgAAgB4kvfh4uf2xqBfP9M+e6Z+98nj5Cr0IAACgCUEvqt4T9WLf7Jm+2bZHy22P6EUAAAA9CHpR9Z6kF0/3zZzum2l9lGp9lPJpPgAAAPCWoBdV74l6sXfmdO9M6y+p1l/oRQAAAD1IevGXVOsvol78vnfm+96Zlp9TLT/TiwAAAHoQ9KLqPUkvfnd75rvbM+GfU2F6EQAAQBOCXlS99xa9+HAp/HDJp/mk0+lULFwVGfZv/VsZjhTw9KlYOBzzJppTsXBVXv6p3ZYXZTgiHGYsLH9SAADwTpH04sOl8MMlSS9W9cxU9cw0P1xq9qsXhyNVVVVVVV6lmEChsTocqQrHPHg+t/V4tP5YWNx8wxFPJggAAHaaoBdV78l6cbqqZ7rpwVLTA3/PLxbYOOoEXDiWsndmZoHhzFzuLoZbrc9jP7VpWI/l7gWdhnRYiyHCTCcQDat3W24+5Wh6duMt4XAklrKO3fQIt/Xkl4djw2+RmgAA4F0i6EXVe5JePHVr+tSt6cYHS41+9mJRl1BTsXA4HFbRk7tGHAsbKijXdaYOdTx5Nhwxn9k05aN1WNY7F8iyGrc4dlpufkbDCcjhiDFDjSFbwDRz60nFwrnlarPSiwAAvBcEvah6T9KL396a/vbWdGN0qTFq7EXbeaxMo7gt30JR57XMqZROO3yzMNtM2QSLhcORiNNz2C8BZ863OY6niF40nS80P4VbHNuXpyxnHXOr2uR8rNNNbuuxh+wOfisAAAB4SNKL0aXG6Fv0YkN0sSG66NN8iv3anD2IHM4DGs4vGq9K257YJQAzj7FdqC40f02XyS1P4dZ6TvNyvudml++datRlPdbNXszldgAA8E4T9KLqPUkvnuyePtk9XX9/sf6+b71Y+LcX02nHuDSdGBuO5DtPnViLRDbJQtMNptiy5lPhZxdjEeOVYnt1up28dPhupWUEuS9mGkdizFPjQ3LL3dZjvPYeC1dZfunIvgQAAOhC0Iuq92S9OHWye+ryT4uXf/K+F63XSbc6e2e7e8rpJssvc0SG08PD7hdvjSuxXE23/XZJoVVru/6beRK38bvPy3VExodYkreI9RgGGo6lzIGoHsIJRwAAtCToRdV7kl785ubUNzf96sWdV/Al2B3+A5EAAADF2IFeDA0thIYWfJrPjtruv9QNAACwDQS9qHpP0ouVXVOVXVN1Qwt172cvAgAAvIcEvah6T9KLJ7qmTnRNXfpx4dKP9CIAAIAeBL2oek/UizemTtygFwEAAHSyrb349Y3Jr29MXry3cPEevQgAAKAHQS+q3pP34oV78xfuzfs0HwAAAHhL0Iuq9yS9+FXn5Fedk7WD87WD9CIAAIAeBL2oek/Si8c7J493TtYOzNcO0IsAAAB6kPTiwHztgKwXOyaPd0zWDMzX0IsAAACaEPSi6j1JLx7rmDjWMVF9d6767pxP8wEAAIC3BL2oek/Ui9cnjl2nFwEAAHSyrb149PrE0esT5yNz5yP0IgAAgB4Evah6T9KLX16b+PLaxLnI3Dl6EQAAQBOCXlS9J+/Fs3dmz96Z9Wk+AAAA8JagF1XvSXrxyLXkkWvJs/2zZ/vpRQAAAD1IerF/9my/rBevJo9cTf7QP/sDvQgAAKAJQS+q3pP04uGrycNXk2f6Zs/00YsAAAB6EPSi6j1JL1a0Jyvak6f7Zk/TiwAAAJoQ9KLqvbfoxd6Z070zPs0HAAAA3pL0Yu/M6d4ZSS8eupI8dCX5fe/M9/QiAACAJgS9qHpP1ovjh66Mf3d75rvb9CIAAIAeBL2oek/Si+Vt4+Vt41W3Z6roRQAAAE0IelH13lv0Ys90Vc+0T/MBAACAtyS92DNd1TMt6cWy1vGy1vFTt6ZP3aIXAQAA9CDoRdV7kl4sbR0vbR3/9tb0t/QiAACAJgS9qHpP1otjpa1jJ7unT3bTiwAAAHoQ9KLqPUkvlrSMlbSMneyeOtk95dN8AAAA4C1RL06d7J6S9+I3N6e+uUkvAgAA6EHQi6r3Kioqiu7Fg+Gxg+GxyptTlfQiAACAJgS9qHqvoqLir7/+Kq4XD4THDoTHKrumKrvoRQAAAD1IerFrqrJr6tChQ3/++WeRvdg8dqB57ETX1Al6EQAAQBOCXlS9V15evrGxUVwv7m9O7G9OfH1j8usbkz7NBwAAAN4S9KLqvbKysvX19SJ7sSmxvynxVefkV530IgAAgB4Evah6r7S0dG1trbhe/KIp8QW9CAAAoBVxL5aUlKyurhbXi/uaEvuaEsc7Jo930IsAAAB6EPSi6r2SkpLV1TdF9mJjYl9j4ljHxLGOCZ/mAwAAAG8JelH1nqQXg43xYGP86PWJo9fpRQAAAD0IelH1ng/08JQAAAJcSURBVKgXG+LBBnoRAABAJ9vai3sb4nsb4l9em/jyGr0IAACgB0Evqt4T9WJ9fG99/MjV5JGrSX+mAwAAAI8JelH1nqQXP6+Pf14fP3w1eZheBAAA0ISgF1XvSf6ezmeX459djh9uTx5uT/ozHQAAAHhM0ovtycPtwl4c/ezyaEV7soJeBAAA0ISgF1XvSXrx08ujn14ePXQleehK0p/pAAAAwGOCXlS9J+rF0OinodHyK+PlV8Z9mg8AAAC8JehF1XuSXvxXaPRfodHytvHyNnoRAABAD5JebBsvbxP14id1o5/UjZa1jZfRiwAAAJoQ9KLqPcnf0/mk7vUnda9LW8dLW+lFAAAAPQh6UfWepBf/een1Py+9Lm0ZK20Z82k+AAAA8JakF1vGSlvG5L1Y0jJWQi8CAABoQtCLqvdKSg4W3YsfX3z98cXXB8NjB8P0IgAAgB4Evah6r6Tk4Js3RfbiRxdff3Tx9YHw2AF6EQAAQBOCXlS9J+rFCyMfXRg50Jw40JzwaT4AAADwlqQXmxMHmhOSXvzHhZF/XBjZ35zYTy8CAABoQtCLqvfkvfhFU+KLJnoRAABAD4JeVL0n+f3ov9eO/L12ZF9TYh+9CAAAoAlBL6rek/z/XT6sHfmwdmRfY2JfI70IAACgB0kvNib2NSZKS0vX1taK7MWakQ9rRoIN8WBD3Kf5AAAAwFuCXlS9J+nFD2pefVDzam9DfC+9CAAAoAlBL6reKysrW19fL7IXq199UP3q8/r45/X0IgAAgB4Evah6T9KLf6t+9Td6EQAAQCtv2Yv/B5yleTg+/tECAAAAAElFTkSuQmCC" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过这个检测，我们很清楚的可以看到各个操作的sql&amp;nbsp; 都成功生成，并且顺利执行了。&lt;/p&gt;&#xD;
&lt;p&gt;今天我们完成了单表的更新操作，但是在实际开发中，经常遇见的是多表同时更新的事务操作，多个表要要么同时更新成功，要么全部滚回。&lt;/p&gt;&#xD;
&lt;p&gt;今天太晚了，我们下次再讲事务操作吧。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xalion/aggbug/2344641.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xalion/archive/2012/02/09/2344641.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/laoyi/archive/2012/02/09/2344621.html</id><title type="text">Android官方开发指南翻译(1)-什么是Android</title><summary type="text">开始我的翻译之旅，英文能力有限，肯定有很多不对的地方，欢迎拍砖！什么是Android?Android是一个移动手机的软件栈，它包括一个操作系统、中间件和关键应用程序。Android SDK提供了利用java语言在android平台上开发应用程序的必要工具和APIs.特征&amp;#183;应用程序框架能够被重用和更换的组件&amp;#183;Dalvik虚拟机优化移动设备&amp;#183;集成浏览器基于开源的WebKit引擎&amp;#183;最优化的图形库由传统的2D图形库组成；3D图形是基于OpenGL ES 1.0规范（可以选择硬件加速）&amp;#183;SQLite提供了结构化数据存储&amp;#183;媒体支持包括传统的音频，</summary><published>2012-02-09T14:15:00Z</published><updated>2012-02-09T14:15:00Z</updated><author><name>到最后</name><uri>http://www.cnblogs.com/laoyi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/laoyi/archive/2012/02/09/2344621.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/laoyi/archive/2012/02/09/2344621.html"/><content type="html">&lt;p&gt;开始我的翻译之旅，英文能力有限，肯定有很多不对的地方，欢迎拍砖！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;什么是&lt;/span&gt;&lt;span lang="EN-US"&gt;Android?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是一个移动手机的软件栈，它包括一个操作系统、中间件和关键应用程序。&lt;/span&gt;&lt;span lang="EN-US"&gt;Android SDK&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;提供了利用&lt;/span&gt;&lt;span lang="EN-US"&gt;java&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;语言在&lt;/span&gt;&lt;span lang="EN-US"&gt;android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;平台上开发应用程序的必要工具和&lt;/span&gt;&lt;span lang="EN-US"&gt;APIs.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;特征&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;应用程序框架&lt;/strong&gt;能够被重用和更换的组件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;Dalvik&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;虚拟机&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;优化移动设备&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;集成浏览器&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;基于开源的&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;WebKit&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;引擎&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;最优化的图形库&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;由传统的&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;2D&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;图形库组成；&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;3D&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;图形是基于&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;OpenGL ES 1.0&lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;规范（可以选择硬件加速）&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;SQLite&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;提供了结构化数据存储&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;媒体支持&lt;/strong&gt;包括传统的音频，视频和图像格式（&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;GSM&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;电话&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（硬件相关）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;蓝牙&lt;/strong&gt;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;,EDGE,3G&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;WIFI&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（硬件相关）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;摄像头&lt;/strong&gt;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;,GPS,&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;指南针和加速计&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（硬件相关）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;富开发环境&lt;/strong&gt;包括一个模拟器，调试工具，内存与性能模型和一个&lt;/span&gt;&lt;span lang="EN-US"&gt;Eclipse IDE&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;插件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;体系结构&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;以下图形展示了&lt;/span&gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;操作系统的主要组件。每个部分的更多详细情况将在后面涉及。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" filled="f" stroked="f" path="m@4@5l@4@11@9@11@9@5xe"&gt; &lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;&lt;v:shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" filled="f" stroked="f" path="m@4@5l@4@11@9@11@9@5xe"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/laoyi/system-architecture.jpg" width="713" height="512" /&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;应用软件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;携带了一组核心应用软件，包括一个邮件客户端，&lt;/span&gt;&lt;span lang="EN-US"&gt;SMS&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;程序，日历，地图，浏览器，通讯录等等。所有应用软件都是&lt;/span&gt;&lt;span lang="EN-US"&gt;java&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;语言编写的。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;应用程序框架&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;提供了一个开放的开发平台，使开发者能够开发极为丰富和创新的应用软件。开发者可以自由利用硬件设备，存储单元信息，运行后台服务，设置报警，增加状态条提示等等很多很多。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;开发者可以完全进入跟系统核心应用软件使用的相同框架&lt;/span&gt;&lt;span lang="EN-US"&gt;APIs.&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这个应用程序框架被设计用于简化组件的重用。任意一个应用程序都可以发布自己的功能，而且其他程序也可以使用那些功能&lt;/span&gt;&lt;span lang="EN-US"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;必须符合框架的安全约束&lt;/span&gt;&lt;span lang="EN-US"&gt;)&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。这个相同的机制允许用户替换这些组件。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;所有应用程序是以一组服务与系统为基础的，包括：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;一组丰富可扩展的视图可以用来创建一个应用程序，包括&lt;/span&gt;&lt;span lang="EN-US"&gt;lists,grids,text boxes,buttons,&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;甚至一个内嵌的浏览器&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;内容提供者可以使应用程序从其他的应用程序获取数据&lt;/span&gt;&lt;span lang="EN-US"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;例如联系簿&lt;/span&gt;&lt;span lang="EN-US"&gt;)&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，或者共享它们自己的数据&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;一个资源管理器为获取非代码资源（例如局部字符串，图形和布局文件）提供了条件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;一个通知管理器可以使所有的应用程序在状态栏中显示自定义的通知&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;一个活动管理器可以管理应用程序的生命周期和提供一个通用的导航回退功能&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;想了解更过详情和应用程序的演示，请查看记事本教程&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;程序库&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;包括一组应用于&lt;/span&gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;系统各种组件的&lt;/span&gt;&lt;span lang="EN-US"&gt;C/C++&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;程序库。这些功能均通过&lt;/span&gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;应用程序框架对开发者开放。一些核心的函数库如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;系统&lt;/strong&gt;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;C&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;程序库&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个&lt;/span&gt;&lt;span lang="EN-US"&gt;BS-&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;派生于标准&lt;/span&gt;&lt;span lang="EN-US"&gt;C&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;系统程序库，为嵌入基于&lt;/span&gt;&lt;span lang="EN-US"&gt;Linux&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的设备&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;媒体程序库&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;基于视频软件的&lt;/span&gt;&lt;span lang="EN-US"&gt;OpenCORE&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;；这些程序库不但支持多种流行音频和视频格式的回放和记录，而且支持静态图片文件，包括&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;MPEG4, H.264, MP3, AAC, AMR, JPG, &lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;和&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;PNG&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;strong style="mso-bidi-font-weight: normal"&gt;界面管理器&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;管理从各种应用程序中访问显示子系统和紧密复合&lt;/span&gt;&lt;span lang="EN-US"&gt;2D&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;3D&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;图层。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;LibWebCore-&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;一个包含&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;Android&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;浏览器和内嵌网络视图的现代网络浏览器引擎&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;SGL-&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;基础&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt; font-weight: normal; mso-bidi-font-weight: bold" lang="EN-US"&gt;2D&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;图形引擎&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;3D&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;程序库&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个基于&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;OpenGL ES 1.0 APIs&lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;的实现；这些程序库使用了&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;3D&lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;硬件加速器&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;如果有这些&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;)&lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;或者内置的高性能的&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;3D&lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;软件光栅期&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt" lang="EN-US"&gt;FreeType-&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; font-weight: normal; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-weight: bold"&gt;位图和矢量字体的渲染&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt; mso-para-margin-left: 2.0gd" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#183;&lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;SQLite&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个可供所有应用程序使用的强大的轻量级关系数据库引擎&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;运行时&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;包括一组核心程序库，它提供了大多数功能可供&lt;/span&gt;&lt;span lang="EN-US"&gt;java&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;编程语言的核心程序库使用。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;每个&lt;/span&gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;程序都通过&lt;/span&gt;&lt;span lang="EN-US"&gt;Dalvik&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;虚拟机的实例运行在自己的进程中。&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;Dalvik&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;可以被写入以便一个设备能有效的运行在多个虚拟机中。&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;Dalvik&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;虚拟机执行经过最小内存封装的&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;Dalvik&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;可执行格式&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;(.dex)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;文件。虚拟机是寄存器，可以运行被&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;java&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;编译器编译的类，这些类已经被内置的&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;dx &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;工具转换成了&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;.dex&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;格式。&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 10pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Dalvik&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;虚拟机依赖于&lt;/span&gt;&lt;span lang="EN-US"&gt;Linux &lt;/span&gt;&lt;span style="font-family: 宋体; color: #333333; font-size: 10pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"&gt;内核&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的基础功能，例如线程和低级的内存管理。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;Linux Kernel&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt" &gt;&lt;span lang="EN-US"&gt;Android&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;依赖&lt;/span&gt;&lt;span lang="EN-US"&gt;Linux 2.6&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;版本的核心系统服务，例如安全性、内存管理、进程管理、网络栈和驱动模型。这个内核也在硬件和其他软件栈中充当了一个抽象层。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/laoyi/aggbug/2344621.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/laoyi/archive/2012/02/09/2344621.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/skysoft001/archive/2012/02/09/2344588.html</id><title type="text">读《.NET设计规范》之命名规范的总结</title><summary type="text">《.NET 设计规范》是数千名微软精锐开发人员的经验和智慧，最终浓缩在这本设计规范之中。它指导着.NET Framework几个版本的开发，和微软windows操作系统的下一代API---WinFX开发。上面这些话是C#之父说的，不是我。它指导着微软内部开发规范，可见是一本非常好的书，而且博客园的其他大牛也推荐过的，是一本修炼内功的武功秘籍。为什么需要命名规范？1、提高框架的可用性，一致性。使的不同项目的开发人员使用同一个框架成为可能。大到一个Framework，小到一些控件(Grid)或者封装的库，他们中的API都是为其他开发者所使用的，固良好的命名很重要。就比如：.NET Framew..</summary><published>2012-02-09T14:07:00Z</published><updated>2012-02-09T14:07:00Z</updated><author><name>stevey</name><uri>http://www.cnblogs.com/skysoft001/</uri></author><link rel="alternate" href="http://www.cnblogs.com/skysoft001/archive/2012/02/09/2344588.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/skysoft001/archive/2012/02/09/2344588.html"/><content type="html">&lt;p&gt;《.NET 设计规范》是数千名微软精锐开发人员的经验和智慧，最终浓缩在这本设计规范之中。它指导着.NET Framework几个版本的开发，和微软windows操作系统的下一代API---WinFX开发。上面这些话是C#之父说的，不是我。它指导着微软内部开发规范，可见是一本非常好的书，而且博客园的其他大牛也推荐过的，是一本修炼内功的武功秘籍。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;为什么需要命名规范？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、提高框架的可用性，一致性。使的不同项目的开发人员使用同一个框架成为可能。大到一个Framework，小到一些控件(Grid)或者封装的库，他们中的API都是为其他开发者所使用的，固良好的命名很重要。就比如：.NET Framework它里面的命名，开发组就花费了大量的时间，大量的讨论，甚至非常高的代价去做，并认为是非常重要的。&lt;/p&gt;&#xD;
&lt;p&gt;2、增加代码的可读性。良好的命名可以是代码易于理解，从名字上面就可以大概知道它的功能，一目了然。使得开发人员相互的沟通更为畅通。如果一个人的代码写的非常规范，那么其他人在阅读或者维护的时候，就比较容易了，可见从命名规范上就可以看出一个人境界。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;标示符的大小写规范&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、&lt;span style="color: #0000ff;"&gt;PascalCasing&lt;/span&gt;。随着Pascal（Turbo Pascal最初的设计师-Anders Hejlsberg-C#之父 ）编程语言的流行起来的大小写风格称为PascalCasing。它被用于除了&lt;span style="color: #0000ff;"&gt;参数名&lt;/span&gt;之外的所有标示符，每个单词的首字母都大写。如：ObjectContext,HtmlTag&lt;/p&gt;&#xD;
&lt;p&gt;2、&lt;span style="color: #0000ff;"&gt;camelCasing&lt;/span&gt;。这种大小写风格看上去就像一个驼峰。它仅仅用于参数的名字。除了第一个单词小写之外，其他单词首字母都大写。如：userName,htmlTag。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;首字母缩写与单词缩写&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;像首字母缩写词（比InputOutput首字母缩写词为IO）为两个的，他们要么全部大写，要么全部小写,如IOStream，ioStream。但首字母缩写词的长度超过2个，则视为一个单词，如Html，Xml，html，xml等。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;　　首字母缩写&lt;/span&gt;是将一个短语的首字母组成，而&lt;span style="color: #0000ff;"&gt;单词缩写&lt;/span&gt;仅仅把一个单词的长度变短。请尽量使用已经被世人认可的首字母缩写词，单词缩写尽量的不用，因为这样会降低可读性的。例如该书上给出一个例子，在.NET 框架中有Color.FromArgb方法，它是一个缩写过度的例子，Argb让人联想到是参数b，arg如果是argument的缩写，这显示不是API设计者的本意。在这里A表示的是alpha通道，所以如果设计成这样Color.FromAlphaRgb或许更符合规范。但.FromArgb API已经随框架中发布出去，就不能随便改了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;复合词&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;复合词应该视为一个单词。如endpoint，Endpoint，常见术语大小写，在这里列出容易写错的一些。Pascal\camel :Callback\&lt;span style="color: #0000ff;"&gt;callback&lt;/span&gt;、Email\email、Gridline\gridline、Hashtable\hashtable、&lt;span style="color: #0000ff;"&gt;Id\id&lt;/span&gt;、Namespace\namespace、Ok\ok、Pi\pi、SignIn\signIn、LogOn\logOn&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;单词的选择&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、要选择易于阅读的名字&lt;/p&gt;&#xD;
&lt;p&gt;2、要看重可读性，而不是更看重简洁性。如：GetWindow要比GetWin要好&lt;/p&gt;&#xD;
&lt;p&gt;3、不要使用下划线，连字符及其他任何既非数字字母的字符。&lt;/p&gt;&#xD;
&lt;p&gt;4、不要使用匈牙利命名法。匈牙利命名法是用一些前缀，比如uiCount表示无符号整数，intCount，在这里ui或者int的前缀。但我们在私有实例字段时候，可以考虑加上前缀m_，如m_count ，这样区别于其他成员，该私有实例字段暴露给外界使用属性，属性的命名采用PascalCasing。给私有静态字段加前缀s_,便于区分，这并不和上面的规范冲突，规范是人约定的，合适的变通，才是王道。对于现代的编辑器来说，将鼠标放在变量上面，就会提示出类型。&lt;/p&gt;&#xD;
&lt;p&gt;5、避免使用与广泛编程语言有冲突的标示符。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在为已有API新增版本命名时候，优先使用后缀来表示已有API的新版本。因为Intellisense会把它们的位置放的很近。或者考虑新的名字。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、除了参数用camelCasing之外,其他大部分都是PascalCasing命名约定。&lt;/p&gt;&#xD;
&lt;p&gt;2、标示符要使用有意义的名字。如GetLength比GetInt要好，不要嫌单词很长(有自动补全功能)，不要使用自创的单词一部分。&lt;/p&gt;&#xD;
&lt;p&gt;3、标示符的含义要比含有类型更为重要。如形参（string value）而不是（string str），在这里value表示一个值，而str表示出它的类型是string。在如foreach（string item in collection）{}中的item。&lt;/p&gt;&#xD;
&lt;p&gt;4、不要在变量名或者参数命中使用下划线。如果一个标示符中的单词可有可无，那还是去掉，这样简洁些。&lt;/p&gt;&#xD;
&lt;p&gt;5、模仿学习框架中的命名，如果你的代码和框架的代码无法区分时，那么你的代码就相当的牛X了&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本为主要目的是让大家了解基本的命名约定，或者能帮助大家对命名规范有些重要的认识，就满足了。当然《.NET 设计规范》 命名规范这章中，还有其他的一些规范，没有列出，请有兴趣的同学自己去看了，谢谢！文中描述如果有不妥之处，还请高手指出，我们共同进步，谢谢！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/skysoft001/aggbug/2344588.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/skysoft001/archive/2012/02/09/2344588.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mcgrady/archive/2012/02/09/2344510.html</id><title type="text">Windows Phone开发之路(14) 加载位图</title><summary type="text">除了文本之外，位图是Silverlight程序中最常见的对象之一，通常我们将其定义为与图形显示设备的像素相对应的二维比特(bit)数组。 Windows原生的位图文件的扩展名是bmp，但是近年它已不占主导地位，而压缩格式开始广泛流行。目前，3种最主流的位图格式为：JPEG(Joint Photography Experts Group,联合图像专家组)PNG(Portable Network Graphics，便携式网络图像)GIF(Graphics Interchange File，图形交换文件) Silverlight只支持JPEG和PNG格式。加载本地位图 一，利用Silver...</summary><published>2012-02-09T13:06:00Z</published><updated>2012-02-09T13:06:00Z</updated><author><name>永远的麦子</name><uri>http://www.cnblogs.com/mcgrady/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mcgrady/archive/2012/02/09/2344510.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mcgrady/archive/2012/02/09/2344510.html"/><content type="html">&lt;p&gt;除了文本之外，位图是Silverlight程序中最常见的对象之一，通常我们将其定义为与图形显示设备的像素相对应的二维比特(bit)数组。&lt;br /&gt;　　Windows原生的位图文件的扩展名是bmp，但是近年它已不占主导地位，而压缩格式开始广泛流行。目前，3种最主流的位图格式为：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;JPEG(Joint Photography Experts Group,联合图像专家组)&lt;/li&gt;&#xD;
&lt;li&gt;PNG(Portable Network Graphics，便携式网络图像)&lt;/li&gt;&#xD;
&lt;li&gt;GIF(Graphics Interchange File，图形交换文件)&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Silverlight只支持JPEG和PNG格式。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;加载本地位图&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000080;"&gt;&lt;strong&gt;一，利用Silverlight中的Image元素加载本地位图&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;XAML代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentPanel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Grid.Row=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;12,0,12,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;Image Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;images/photo.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                   Stretch=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;None&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;注：Stretch="None"表示以原始尺寸显示位图&lt;br /&gt;　　　　效果如图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/311549/2012020920010994.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080;"&gt;二，利用C#代码加载本地位图&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;XAML代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentPanel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Grid.Row=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;12,0,12,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;Button Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnLoad&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;br /&gt;                    Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;利用C#代码加载本地位图&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                    HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Center&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                    VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                    Click=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnLoad_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;            &amp;lt;Image Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;img&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                   Stretch=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;None&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;C#代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 构造函数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; MainPage()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; btnLoad_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;处理按钮单击事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Uri uri = new Uri("/SilverlightTapToLoad;component/images/photo.jpg", UriKind.Relative);&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建Uri对象，此时位图的Build Action为Resource。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Uri uri = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Uri(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;images/photo.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, UriKind.Relative);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;此时位图的Build Action为Content&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;            StreamResourceInfo resourceinfo = Application.GetResourceStream(uri);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;调用Application类的GetResourceStream方法访问资源文件并返回StreamResourceInfo&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            BitmapImage bmp = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; BitmapImage();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建一个BitmapImage对象作为数据源&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            bmp.SetSource(resourceinfo.Stream);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;调用SetSource方法获取资源中的流&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            img.Source = bmp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置位图的数据源&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;效果如图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/311549/2012020920271238.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;操作手机图片库&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面的实例是利用PhotoChooserTask选择器查看手机图片库中的图片。&lt;/p&gt;&#xD;
&lt;p&gt;XAML代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Transparent&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;Button Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnPhotoChooser&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;图片选择器&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Center&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Padding=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0,34&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Click=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnPhotoChooser_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;Image Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;imgChooser&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;C#代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage&lt;br /&gt;    {&lt;br /&gt;        PhotoChooserTask choosePhoto = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PhotoChooserTask();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建一个PhotoChooserTask对象&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 构造函数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; MainPage()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.choosePhoto.Completed += choosePhoto_Completed;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;注册事件处理程序，获取选择器操作的结果&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; btnPhotoChooser_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;处理按钮单击事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            choosePhoto.Show();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;启动图片选择器&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; choosePhoto_Completed(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, PhotoResult e)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;事件处理程序,PhotoResult类表示通过调用PhotoChooserTask返回的图片&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.TaskResult == TaskResult.OK)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;任务成功完成,TaskResult表示任务是否完成&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                CompleteChooserTask(e);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;调用方法，显示图片&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CompleteChooserTask(PhotoResult e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; bmp = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; BitmapImage();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建一个BitmapImage对象作为Image元素的数据源。等价于BitmapImage bmp=new BitmapImage()&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            bmp.SetSource(e.ChosenPhoto);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;调用SetSource方法获取照片的数据流。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.imgChooser.Source = bmp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置Image元素的数据源显示图片&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;效果如图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/311549/2012020921020112.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mcgrady/aggbug/2344510.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mcgrady/archive/2012/02/09/2344510.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hailan2012/archive/2012/02/09/2344483.html</id><title type="text">net加密基础2-非对称加密</title><summary type="text">非对称密码算法非对称密码算法使用2个不同但在数学上却相关的密钥。用于加密数据的密钥不能用于解密。非对称密码技术统称称为“公钥加密技术”，没有双方必要保密的单个密钥。公钥加密技术只有一个必须由一方保密的私钥，第二个密钥就是公钥，任何想与他们通信的人都可以随意使用它。安全web通信就是采用的这种技术。该技术可以用于电子商务。非对称和对称的区别对称加密和非对称加密的密钥类型分别是私钥和公钥。对称加密使用的是私钥加密，也就是密钥只能是加密者和解密者知道，第3方不能知道。而非对称加密情况完全不一样，非对称加密有2个不同的密钥，一个是公共的密钥，一个是私有的密钥，公钥是可以让外人知道的，因为公钥只用来加密</summary><published>2012-02-09T12:31:00Z</published><updated>2012-02-09T12:31:00Z</updated><author><name>海不是蓝</name><uri>http://www.cnblogs.com/hailan2012/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hailan2012/archive/2012/02/09/2344483.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hailan2012/archive/2012/02/09/2344483.html"/><content type="html">&lt;div  style="layout-grid: 15.6000pt;"&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.1000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;非对称密码算法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: normal; font-size: 12.0000pt; font-family: '幼圆';"&gt;非对称密码算法使用2个不同但在数学上却相关的密钥。用于加密数据的密钥不能用于解密。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: normal; font-size: 12.0000pt; font-family: '幼圆';"&gt;非对称密码技术统称称为&amp;ldquo;公钥加密技术&amp;rdquo;，没有双方必要保密的单个密钥。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: normal; font-size: 12.0000pt; font-family: '幼圆';"&gt;公钥加密技术只有一个必须由一方保密的私钥，第二个密钥就是公钥，任何想与他们通信的人都可以随意使用它。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: normal; font-size: 12.0000pt; font-family: '幼圆';"&gt;安全web通信就是采用的这种技术。该技术可以用于电子商务。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.1000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;非对称和对称的区别&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;对称加密和非对称加密的密钥类型分别是私钥和公钥。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;对称加密使用的是&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;私钥加密，也就是密钥只能是加密者和解密者知道，第&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;3方不能知道。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;而非对称加密情况完全不一样，非对称加密有2个不同的密钥，一个是公共的密钥，一个是私有的密钥，公钥是可以让外人知道的，因为公钥只用来加密数据，而私钥只能由解密方知道，只有私钥能解密！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;官方的啰嗦！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: normal; font-size: 12.0000pt; font-family: '幼圆';"&gt;公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联；用公钥加密的数据只能用私钥解密，而用私钥签名的数据只能用公钥验证。公钥可以提供给任何人；公钥用于对要发送到私钥持有者的数据进行加密。两个密钥对于通信会话都是唯一的。公钥加密算法也称为不对称算法，原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.1000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;经典的小红和小明&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;双方（小红和小明）可以按照下列方式使用公钥加密。首先，小红生成一个公钥/私钥对。如果小明想要给小红发送一条加密的消息，他将向她索要她的公钥。小红通过不安全的网络将她的公钥发送给小明，小明接着使用该密钥加密消息。（如果小明在不安全的信道如公共网络上收到小红的密钥，则小明必须同小红验证他具有她的公钥的正确副本。）小明将加密的消息发送给小红，而小红使用她的私钥解密该消息。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;但是，在传输小红的公钥期间，未经授权的代理可能截获该密钥。而且，同一代理可能截获来自小明的加密消息。但是，该代理无法用公钥解密该消息。该消息只能用小红的私钥解密，而该私钥没有被传输。小红不使用她的私钥加密给小明的答复消息，原因是任何具有公钥的人都可以解密该消息。如果小红想要将消息发送回小明，她将向小明索要他的公钥并使用该公钥加密她的消息。然后，小明使用与他相关联的私钥来解密该消息。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;在一个实际方案中，小红和小明使用公钥（不对称）加密来传输私（对称）钥，而对他们的会话的其余部分使用私钥加密。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.1000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" colspan="5" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;NET中的非对称加密算法类&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: 0.5000pt solid #000000; mso-border-left-alt: 0.5000pt solid #000000; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #3366ff;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;算法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #3366ff;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;抽象算法类&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #3366ff;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;默认实现类&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #3366ff;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;有效密钥大小(位)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #3366ff;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;默认密钥大小(位)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: 0.5000pt solid #000000; mso-border-left-alt: 0.5000pt solid #000000; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;RSA&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;RSA&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;364-16384&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;1024&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: 0.5000pt solid #000000; mso-border-left-alt: 0.5000pt solid #000000; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;DSA&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;DSA&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;DSACryptoServiceProvider&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;364-512&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="width: 85.2500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; border-left: none; ; mso-border-left-alt: none; ; border-right: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; border-top: none; ; mso-border-top-alt: 0.5000pt solid #000000; border-bottom: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3;" valign="top" width="113"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;1024&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;注意：&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;公钥加密算法使用固定的缓冲区大小，而私钥加密算法使用长度可变的缓冲区。&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;公钥算法无法像私钥算法那样将数据链接起来成为流&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;，原因是它只可以加密少量数据。因此，不对称操作不使用与对称操作相同的流模型。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;所有的非对称加密算法都是由&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;AsymmetricAlgorithm&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;类派生。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/291198/2012020919574919.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.1000pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;非对称RSA加密算法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;&amp;nbsp;&amp;nbsp;实际使用中很少直接用RSA类来实现加密算法，因为它们采用不进行填充的原始计算。而是使用&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;实现类的加密和解密方法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;byte&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;[]&amp;nbsp;Decrypt(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;byte&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;[]&amp;nbsp;rgb,&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;bool&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;fOAEP);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;byte&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;[]&amp;nbsp;Encrypt(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;byte&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;[]&amp;nbsp;rgb,&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;bool&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;fOAEP);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;创建个rsa算法的对象&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;rsa&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;new&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;();&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;我们怎么获取公钥和私钥信息？&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;之前的对称算法可以获取算法的key和IV信息。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;但是非对称算法不提供可以用于检索密钥信息的任何属性！如果需要保存密钥信息供以后使用，就只能用ToXmlString()方法输出密钥对的信息。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;override&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;string&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;bool&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;includePrivateParameters);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;这个布尔参数如果设置为true，那么就会输出带私钥的xml，如果是false，那么就只输出带公钥的xml。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;尝试输出完整的密钥对&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;rsa.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;true&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #008000; font-size: 9.5000pt; font-family: '宋体';"&gt;----------------------------&lt;span style="font-family: 宋体;"&gt;完整的密钥对信息&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;-----------------------------&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAKeyValue&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Modulus&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;yvGBq09qcWhIi+u3UHGK0EH5zav018FVGM+BPiXK23nFZeRky9HLrOH9DP5Bc7NXyBxoE0MC3YmaG68tr6nHtLhI7&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;TVshAsfMX1E2BjTfLq1wHhcFwTJSvyNpwnR9NHMZsDE166XgRQ5vHkfFwBWvk7F8YVcACKp3Y6OcvAcp1s=&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Modulus&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Exponent&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;AQAB&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Exponent&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;P&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;7+9YUu/6SFlOW4RrON/Lie+bMSmOZB/wfqj9AAdmX+n8joPQ/WLA69/CtetzIZ6KIOkD2fd8MFiFrjoHSXmpUQ==&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;P&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Q&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;2IgZma4hTV3EWFP3TXasajl23oRoLBeuWZldu+Q2pyeCwuBE6Mmp2aTbXauPGw3ptUAX/8pw0QyI/6i0b3wa6w==&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Q&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;DP&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;F4AW45Czr/BnV1lh8yEgW3NHfQo38yCZup4soZsX8N8HKKJKjvbkNHYnKRBVp35SwyRvhyLRXB7fgRAX9J9g8Q==&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;DP&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;DQ&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;SSgCbje0rKznb2g+/37+1YzAqoFVqL//eeolDxwVkvf4Z9rZrUSlDBF0w/r4iI10znXvJc7Buv9fMfFPtPLbLQ==&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;DQ&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;InverseQ&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;pJ37e7nw8Joy2dmnrYf5urx88NQz1TBKZF/xGReSeTiBsbkugqkoHWvX6GoWV8TL7Gx9ZRmAma/rs3YWQbk00Q==&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;InverseQ&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;D&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;PrjbibW2wSwo183XTy54Z5sseIt/1brz8QIZALsvchu1jaNEH9ZMa7dAvWZLllXEeJ2G8QUR+qRPk+TVaug/RydliAPdf11h+7nnIoNOzk4LJtBFmNROPXTOLNwap+GJWIQM1Hd72V4kDiv1He3HUNLsLgGmUelDWekISUzrYOE=&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;D&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAKeyValue&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;上面的xml信息可以在我们需要使用的时候导入到算法里面。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;只输出公钥信息&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;rsa.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;false&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #008000; font-size: 9.5000pt; font-family: '宋体';"&gt;----------------------------&lt;span style="font-family: 宋体;"&gt;只包含公钥信息&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;-----------------------------&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAKeyValue&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Modulus&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;igBXA4/oLVLNP+r9jxdx1lLfqNNkSUOe0ApKql8/jmUGc/dIzSMF6bgBcvw5dBxXncYVXxrtk7&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;AEilemz8PQui07M0NbJ4IeGQzRcJJNlAsQJvGWTydaoH/xLm4I0wH13RG2V9&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;UjcOYPMOHBEapB4Flkst44qqclw8SVuh55OWk=&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Modulus&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Exponent&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;AQAB&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Exponent&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAKeyValue&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;一个简单的RSA例子&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('c47487d2-7e0f-4cdd-9958-f333a478210b')"&gt;&#xD;
&lt;div id="cnblogs_code_open_c47487d2-7e0f-4cdd-9958-f333a478210b" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main()&lt;br /&gt;{&lt;br /&gt;    Byte[] StrByte = Encoding.UTF8.GetBytes(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;我是明文&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;    RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str = RSAEncryptor(rsa.ToXmlString(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;), StrByte);&lt;br /&gt;    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;密文：{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, str);&lt;br /&gt;    Encoding en = Encoding.UTF8;&lt;br /&gt;    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;明文：{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, RSADecryptor(rsa.ToXmlString(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;), Convert.FromBase64String(str), en));&lt;br /&gt;    Console.Read();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RSAEncryptor(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; XMLKey, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] Str)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;        rsa.FromXmlString(XMLKey);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Convert.ToBase64String(rsa.Encrypt(Str, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;));&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (CryptographicException e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(e.Message);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RSADecryptor(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; XMLKey, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] Str, Encoding en)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;        rsa.FromXmlString(XMLKey);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; en.GetString(rsa.Decrypt(Str, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;));&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (CryptographicException e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(e.Message);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/291198/2012020920001034.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;如果给解密的RSA对象传输个不包含私钥的XML，那么就会异常了，&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;你可以讲上面调用解密的代码修改成下面这样，就能得到异常了&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;"明文：{0}"&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;,&amp;nbsp;RSADecryptor(rsa.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;false&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;),&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Convert&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;.FromBase64String(str),&amp;nbsp;en));&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.3500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;使用参数来传递密钥信息&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;RSAParameters&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;有2个方法可以导出&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAParameters&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;类型的参数对象。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;在使用加密解密算法的时候我们就只需要传递&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAParameters&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;对象&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 12.0000pt; font-family: '幼圆';"&gt;将上面的代码成使用&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSAParameters&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('e55943df-f59e-41b3-8fd4-4da6bf8560b1')"&gt;&#xD;
&lt;div id="cnblogs_code_open_e55943df-f59e-41b3-8fd4-4da6bf8560b1" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main()&lt;br /&gt;{&lt;br /&gt;    Byte[] StrByte = Encoding.UTF8.GetBytes(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;使用RSAParameters&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;    RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str = RSAEncryptor(rsa.ExportParameters(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;), StrByte);&lt;br /&gt;    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;密文：{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, str);&lt;br /&gt;    Encoding en = Encoding.UTF8;&lt;br /&gt;    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;明文：{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, RSADecryptor(rsa.ExportParameters(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;), Convert.FromBase64String(str), en));&lt;br /&gt;    Console.Read();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RSAEncryptor(RSAParameters KeyPar, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] Str)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;        rsa.ImportParameters(KeyPar);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Convert.ToBase64String(rsa.Encrypt(Str, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;));&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (CryptographicException e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(e.Message);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RSADecryptor(RSAParameters KeyPar, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] Str, Encoding en)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;        rsa.ImportParameters(KeyPar);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; en.GetString(rsa.Decrypt(Str, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;));&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (CryptographicException e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(e.Message);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/291198/2012020920034848.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.3500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;使用容器存储CSP密钥&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-size: 12.0000pt; font-family: '幼圆';"&gt;之前使用的导出XML密钥信息的做法并不妥当，推荐使用密钥容器。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0066ff; font-size: 12.0000pt; font-family: '幼圆';"&gt;有关密钥容器的更多信息，请参见位于&amp;nbsp;http://www.microsoft.com/china/msdn&amp;nbsp;上的&amp;nbsp;Platform&amp;nbsp;SDK&amp;nbsp;文档中的&amp;ldquo;CryptoAPI&amp;rdquo;一节&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #008000; font-size: 12.0000pt; font-family: '幼圆';"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-size: 12.0000pt; font-family: '幼圆';"&gt;我们这里使用的密钥容器是CspParameters类，当我们创建个CspParameters对象时，会生成随机的密钥对信息。我们只需要使用这个对象，便能方便的把密钥信息传递给相关的加密解密方法。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;不使用密钥容器创建2个不同的RSA对象&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;rsa1&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;new&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;();&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;string&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;xml1&amp;nbsp;=&amp;nbsp;rsa1.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;true&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;rsa2&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;new&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;();&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;string&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;xml2&amp;nbsp;=&amp;nbsp;rsa2.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;true&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;.WriteLine(xml1&amp;nbsp;==&amp;nbsp;xml2);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;输出False&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;使用密钥容器创建2个不同的RSA对象&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;CspParameters&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;csp&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;new&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;CspParameters&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;();&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;csp.KeyContainerName&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #a31515; font-size: 9.5000pt; font-family: 'Courier New';"&gt;"MyCspParameters"&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;rsa1&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;new&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;(csp);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;string&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;xml1&amp;nbsp;=&amp;nbsp;rsa1.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;true&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;rsa2&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;new&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;RSACryptoServiceProvider&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;(csp);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;string&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;&amp;nbsp;xml2&amp;nbsp;=&amp;nbsp;rsa2.ToXmlString(&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; color: #0000ff; font-size: 9.5000pt; font-family: 'Courier New';"&gt;true&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #2b91af; font-size: 9.5000pt; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="mso-spacerun: 'yes'; font-size: 9.5000pt; font-family: 'Courier New';"&gt;.WriteLine(xml1&amp;nbsp;==&amp;nbsp;xml2);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;输出True&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;table style="padding: 0pt 5.4pt; width: 100%; border-collapse: collapse;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="width: 426.3500pt; padding: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-left-alt: 0.5000pt solid #000000; mso-border-right-alt: 0.5000pt solid #000000; mso-border-top-alt: 0.5000pt solid #000000; mso-border-bottom-alt: 0.5000pt solid #000000; background: #b3b3b3; border: 0.5000pt solid #000000;" valign="top" width="568"&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;RSA加密大数据对象&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="mso-spacerun: 'yes'; color: #000000; font-weight: bold; font-size: 12.0000pt; font-family: '幼圆';"&gt;RSA算法的一个弱点是只能加密117字节数据，前面的实例都是比较小的数据。&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;所以加密大数据对象的时候我们只能使用分块加密，讲数据分成多次加密。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;(注意RSA加密后的Byte数组长度固定为128，117和128都是在默认密钥大小下的规定，如果您使用的不是默认密钥大小，那么就会不一样)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;解密的思维也是将加密后的字节数组分多次来解密，这里每次最大每次解密128字节数据。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main()&lt;br /&gt;{&lt;br /&gt;    Byte[] StrByte = Encoding.UTF8.GetBytes(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;王祖贤（1967年1月31日出生），英文名Joey Wong，身高1.72米。出生于台湾台北市，祖籍安徽舒城。台湾出道后于香港发展之电影女演员。17岁时拍摄第一部电影《今年的湖畔会很冷》并获得金马奖三项提名。1987年以《倩女幽魂》一片开始走红于亚洲各地。2009年7月7日传王祖贤因感情不顺在加拿大削发为尼。王祖贤本人对此表示否认，王父也通过王祖贤干爹傅达仁否认传言。&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(StrByte.Length);&lt;br /&gt;    RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str = RSAEncryptor(rsa.ExportParameters(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;), StrByte);&lt;br /&gt;    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;密文：{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, str);&lt;br /&gt;    Encoding en = Encoding.UTF8;&lt;br /&gt;    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;明文：{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, RSADecryptor(rsa.ExportParameters(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;), Convert.FromBase64String(str), en));&lt;br /&gt;    Console.Read();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RSAEncryptor(RSAParameters par, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] Str)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;        rsa.ImportParameters(par);&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取RSA最大加密的长度&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        Int32 KeySize = rsa.KeySize / &lt;span style="color: #800080;"&gt;8&lt;/span&gt;;&lt;br /&gt;        Int32 BlockSize = KeySize - &lt;span style="color: #800080;"&gt;11&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Str.Length &amp;gt; BlockSize)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;分配加密次数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Int32 EncryptIndex = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Str.Length % BlockSize != &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;不能整除&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                EncryptIndex = Str.Length / BlockSize + &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                EncryptIndex = Str.Length / BlockSize;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;分配存储已加密的byte数组，请注意下这里分配的大小&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;每次只能加密117长度的数据，但是每次加密117长度的数据要生成128长度的密文。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Byte[] EncryptByte = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Byte[EncryptIndex * KeySize];&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (Int32 i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; EncryptIndex; i++)&lt;br /&gt;            {&lt;br /&gt;                Byte[] Block = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Byte[BlockSize];&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (i == (EncryptIndex - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;))&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;最后一次加密&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    Array.Copy(Str, i * BlockSize, Block, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, Str.Length % BlockSize);&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    Array.Copy(Str, i * BlockSize, Block, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, BlockSize);&lt;br /&gt;                }&lt;br /&gt;                Byte[] Block1 = rsa.Encrypt(Block, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;将加密过的Byte数组保存到EncryptByte中&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                Array.Copy(Block1, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, EncryptByte, i * KeySize, KeySize);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Convert.ToBase64String(EncryptByte);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] b = rsa.Encrypt(Str, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Convert.ToBase64String(b);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (CryptographicException e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(e.Message);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RSADecryptor(RSAParameters par, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] Str, Encoding en)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        Byte[] Block1;&lt;br /&gt;        RSACryptoServiceProvider rsa = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;br /&gt;        rsa.ImportParameters(par);&lt;br /&gt;        Int32 KeySize = rsa.KeySize / &lt;span style="color: #800080;"&gt;8&lt;/span&gt;;&lt;br /&gt;        Int32 BlockSize = KeySize - &lt;span style="color: #800080;"&gt;11&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Str.Length == KeySize)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; en.GetString(rsa.Decrypt(Str, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;));&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;这个变量用来记录所有解密后的Byte数组的长度&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Int32 Len = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;保存每次解密后的Byte数组&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            List&amp;lt;Byte[]&amp;gt; list = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Byte[]&amp;gt;();&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;计算解密需要的次数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Int32 EncryptIndex = Str.Length / KeySize;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (Int32 i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; EncryptIndex; i++)&lt;br /&gt;            {&lt;br /&gt;                Byte[] Block = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Byte[KeySize];&lt;br /&gt;                Array.Copy(Str, i * KeySize, Block, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, KeySize);&lt;br /&gt;                Block1 = rsa.Decrypt(Block, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;                Len += Block1.Length;&lt;br /&gt;                list.Add(Block1);&lt;br /&gt;            }&lt;br /&gt;            Byte[] EncryptByte = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Byte[Len];&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (Int32 i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; list.Count; i++)&lt;br /&gt;            {&lt;br /&gt;                Array.Copy(list[i], &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, EncryptByte, i * BlockSize, BlockSize);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; en.GetString(EncryptByte);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (CryptographicException e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(e.Message);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/291198/2012020920243042.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table style="background-color: #74878b; width: 100%;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆;"&gt;RSA的优点和缺点&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p &gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;优点&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;1.安全性高，几乎不会被攻破。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;缺点&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;1.速度慢，数学原理复杂。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;2.单次加密数据小，加密大数据处理复杂&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;table style="background-color: #05f95d; width: 100%;" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="text-align: left;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;作者：海不是蓝&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;博客：http://www.cnblogs.com/hailan2012/&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;邮箱：hailan2012@sina.com&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hailan2012/aggbug/2344483.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hailan2012/archive/2012/02/09/2344483.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
