<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_梁逸晨的IT专栏</title><subtitle type="text">草如茵，松如盖，风为裳，水为佩。</subtitle><id>http://feed.cnblogs.com/blog/u/24297/rss</id><updated>2012-02-10T01:36:39Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24297/rss"/><entry><id>http://www.cnblogs.com/kvspas/archive/2012/02/10/Code-First_SQLServer_Compact_4-0.html</id><title type="text">Code-First 在SQLServer Compact 4.0 中的应用（一），基础配置</title><summary type="text">SQLServer Compact 4.0 是代替Access构建轻量级程序的完美方案，特别是在Web程序中。 在CodeFirst的搭配下，更能够加速我们的开发效率，本文就如何构建运行环境作一番记录。</summary><published>2012-02-09T18:49:00Z</published><updated>2012-02-09T18:49:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2012/02/10/Code-First_SQLServer_Compact_4-0.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2012/02/10/Code-First_SQLServer_Compact_4-0.html"/><content type="html">&#xD;
&lt;p&gt;&lt;span&gt;&#xD;
 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;在继续往下看之前，首先一定要保证你的IIS运行&lt;/span&gt;&lt;span&gt;于 &lt;strong&gt;ASP.Net 4.0 ，这是唯一的&lt;/strong&gt;&lt;span&gt;&lt;strong&gt;要求&lt;/strong&gt;，&lt;/span&gt;&lt;span&gt;SQLServer Compact 4.0&lt;/span&gt;&lt;/span&gt;&lt;span&gt;只能运行于4.0环境，没有商量的余地。如果做不到，要么改善一下与服务器管理员的人际关系，要么就换服务器。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;虽然我也知道有办法可以让 SQLServer Compact 3.5运行于ASP.NET 2.0-3.5，但是，CodeFirst与LINQ一定会有错误发生。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;至于那些还在用1.1环境的朋友，我不想说技术问题，只希望你能明白：今年已经是世界末日。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;至于桌面应用环境，一样需要.net 4.0环境。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;本文的运行环境是ASP.NET Webform 4.0 ，你也可以选择MVC环境。 既然标题说了是 SQLServer Compact 4.0， 那么如果你的服务器还没有安装SQLServer Compact 4.0的&lt;/span&gt;&lt;span&gt;话，&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;别紧张， 不需要你安装任何东西&lt;/span&gt;&lt;span&gt;。 只需要把下面文件放入Bin文件夹就行了：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/kvspas/SQLServerCE4_Bin.rar"&gt;http://files.cnblogs.com/kvspas/SQLServerCE4_Bin.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;里面的东西一定很多（主要是64和32都有），肯定有可以去掉的，但是我没那精力去研究哪些是需要的，哪些是可以去掉的，如果你研究出来了，谢谢汇报一下。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;然后是配置&lt;/span&gt;&lt;span&gt;Entit&lt;/span&gt;&lt;span&gt;yFr&lt;/span&gt;&lt;span&gt;amewor&lt;/span&gt;&lt;span&gt;k &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;.1 &lt;/span&gt;&lt;/strong&gt;：我们可以通过Nug&lt;span&gt;et或&lt;/span&gt;&lt;span&gt;者手动下载的&lt;/span&gt;&lt;span&gt;方式来&lt;/span&gt;&lt;span&gt;安装 &lt;/span&gt;&lt;span&gt;Entit&lt;/span&gt;&lt;span&gt;yFr&lt;/span&gt;&lt;span&gt;amewor&lt;/span&gt;&lt;span&gt;k &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;.1 &lt;/span&gt;&lt;span&gt;，这里我推荐&lt;/span&gt;&lt;span&gt;后者。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;安装文件下载地址： &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=8363"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=8363&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;如果你没有服务器的配置权限，就把下面的文件放入Bin文件夹就行了：&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/kvspas/EntityFramework.rar"&gt;http://files.cnblogs.com/kvspas/EntityFramework.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;项目中引用它：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_codefirst-sqlce-t1.png" width="282" height="190" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_codefirst-sqlce-t2.png" width="607" height="53" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以及，引用System.ComponentModel.DataAnnotations：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_codefirst-sqlce-t3.png" width="332" height="189" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_codefirst-sqlce-t4.png" width="590" height="36" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;接下来就可以开始正题了：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt;"&gt;步骤一&lt;/strong&gt;&lt;span style="font-size: 14pt;"&gt;：创建数据表&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;不要看那些类似广告的教程吹得天花乱坠，即使是POCO编码，也并非绝对&amp;#8220;干净&amp;#8221;的，必须至少定义一个特性来标识主键([Key])，要不然的话，我不说，你可以试试看为了保持所谓的&amp;#8220;美观&amp;#8221;，而把[Key]特性去掉会是什么后果。&lt;/em&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;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;LiangyichenDB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;主键，必须定义&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Key,&amp;nbsp;DatabaseGenerated(DatabaseGeneratedOption.Identity)]&lt;br /&gt;&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;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&amp;nbsp;index&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&amp;nbsp;title&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;DateTime&amp;nbsp;pubdate&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt;"&gt;&amp;nbsp;步骤二&lt;/strong&gt;&lt;span style="font-size: 14pt;"&gt;：创建数据库访问对象：&lt;/span&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;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;LiangyichenDBContext&amp;nbsp;:&amp;nbsp;DbContext&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;DbSet&amp;lt;LiangyichenDB&amp;gt;&amp;nbsp;Items&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以上两个类型需要引用命名空间：&lt;br /&gt;using System.Data.Entity;&lt;br /&gt;using System.ComponentModel.DataAnnotations;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;好了，以上两个步骤通用于任意数据库，和 SQLServer Compact 并没有绝对的关系，接下来是开始 &lt;strong style="color: rgb(255, 0, 0);"&gt;配置&amp;nbsp;&amp;nbsp;SQLServer Compact&lt;/strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; ：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="color: rgb(51, 153, 102);"&gt;不需要你去创建实际的数据库文件&lt;/strong&gt;， 你只需要在 Web.Config 的 connectionStrings 中设置这么一段话：&lt;/p&gt;&lt;p&gt;&amp;lt;add name="LiangyichenDBContext" connectionString="Data Source=|DataDirectory|\Database.sdf" providerName="System.Data.SqlServerCe.4.0" /&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;上面虽然说了不需要你创建实际的数据库文件名，但是需要事先保证 App_Code文件夹已经存在， 不要问我为什么。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;谨记： &lt;/strong&gt;&lt;/span&gt;name="LiangyichenDBContext"&amp;nbsp; ， name的值必须与数据库访问对象同名，同理，不要问我为什么，也不要浪费精力去探讨或者改变什么，你只需要明白太阳一定是从东边升起的，古往今来的种种惨案告诉我们：知道得太多不是好事。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;至于数据库文件名，可以任意。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Page_Load(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&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: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&amp;nbsp;context&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;LiangyichenDBContext();&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;context.Items.Add(&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;LiangyichenDB&amp;nbsp;{&amp;nbsp;title&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;pubdate&amp;nbsp;=&amp;nbsp;DateTime.Now&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;context.Items.Add(&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;LiangyichenDB&amp;nbsp;{&amp;nbsp;title&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;pubdate&amp;nbsp;=&amp;nbsp;DateTime.Now&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;context.Items.Add(&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;LiangyichenDB&amp;nbsp;{&amp;nbsp;title&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;pubdate&amp;nbsp;=&amp;nbsp;DateTime.Now&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;context.SaveChanges();&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: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt;&amp;nbsp;context.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;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;output(i.title);&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;&lt;br /&gt;&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;void&lt;/span&gt;&amp;nbsp;output(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&amp;nbsp;str)&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;Response.Write(str+&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;br&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&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;/p&gt;&lt;p&gt;行了，运行一下，你就会发现App_Code文件夹中已经自动生成了Database.sdf 文件。 &lt;/p&gt;&lt;p&gt;SQLServer Compact 4.0 的 Code-First 基本配置结束。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;下面是项目文件下载地址，在VisualStudio2010中启动成功。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/kvspas/Webform-SQLServer-Code-First.rar"&gt;http://files.cnblogs.com/kvspas/Webform-SQLServer-Code-First.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;（注意我说的是&amp;#8220;项目文件&amp;#8221;，所以你一定需要在VisualStudio2010中打开sln文件运行，不能直接弄到IIS下面启动）&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;如果第一次运行之后，再去修改、添加、删除表的字段、删除数据库文件，那么程序一定会出错，下一篇再说怎么解决。&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &#xD;
&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2344763.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2012/02/10/Code-First_SQLServer_Compact_4-0.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2012/02/03/2336609.html</id><title type="text">for与foreach，在遍历属性时的差别，for能够更安全的获取数据</title><summary type="text">某些类的某些属性，由于实现了IQueryable或IEnumerable， 能够更方便、更优美地使用foreach查询。 但是在一些特殊情况下，foreach不一定能够查询到准确的值，例如以下情况： 建造一个HtmlTable (runat=server)，至少有一行数据，内容任意，然后再建造一个添加行数据的方法，在每次添加完数据之后，立即使用 foreach(var i in obj.Rows) 查询，这时候就会出现“集合已经更改”的错误。</summary><published>2012-02-03T02:10:00Z</published><updated>2012-02-03T02:10:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2012/02/03/2336609.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2012/02/03/2336609.html"/><content type="html">&#xD;
 &#xD;
某些类的某些属性，由于实现了IQueryable或IEnumerable， 能够更方便、更优美地使用foreach查询。 但是在一些特殊情况下，foreach不一定能够查询到准确的值，例如以下情况：&lt;br /&gt;&lt;br /&gt;建造一个HtmlTable (runat=server)，至少有一行数据，内容任意，然后再建造一个添加行数据的方法，在每次添加完数据之后，立即使用 foreach(var i in obj.Rows) 查询，这时候就会出现&amp;#8220;集合已经更改&amp;#8221;的错误。&lt;br /&gt;&lt;br /&gt;如果我们换成for(var i = 0; i&amp;lt; obj.Rows.Count;i++)，就可以避免错误发生了。 因为for是实时查询，而foreach是调用IQueryable或IEnumerable中的yield return 的后期查询，在实现机制上有所不同。&lt;br /&gt;&lt;br /&gt;当然for需要编写更多的代码，在外观上也没有foreach的可读性高，这时候也需要我们根据具体情况具体使用。&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2336609.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2012/02/03/2336609.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2012/01/26/2329537.html</id><title type="text">图解MVC中的路由设置对应的Contorller和View</title><summary type="text">以上是默认的情况， 执行顺序我们这样理解： 1：首先定位到HomeController类。2：然后定位到Index方法。关于类的映射：路由设置中，controller = &amp;quot;Home&amp;quot; 会映射到HomeController类， 而HomeController类的类名，我们需要拆分为两个单词去理解： &amp;quot;Home&amp;quot;+&amp;quot;Controller&amp;quot;。 路由会查找到前面的那个词语，并绑定之，在这里是属于名称半匹配。关于方法的映射：action = &amp;quot;Index&amp;quot; 映射到 Index 方法，是属于全名匹配。默认的例子可能会带来一个</summary><published>2012-01-25T19:33:00Z</published><updated>2012-01-25T19:33:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2012/01/26/2329537.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2012/01/26/2329537.html"/><content type="html">&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_mvc-route-1.png" width="378" height="477" /&gt; &#xD;
&lt;/p&gt;&lt;p&gt;以上是默认的情况， 执行顺序我们这样理解：&amp;nbsp; &lt;/p&gt;&lt;p&gt;1：首先定位到&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;strong&gt;&lt;u&gt;Home&lt;/u&gt;&lt;/strong&gt;Controller&lt;/span&gt;类。&lt;/p&gt;&lt;p&gt;2：然后定位到&lt;span style="color: rgb(51, 102, 255);"&gt;Index&lt;/span&gt;方法。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;关于类的映射&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;路由设置中，controller = "Home" 会映射到HomeController类， 而HomeController类的类名，我们需要拆分为两个单词去理解： "Home"+"Controller"。 路由会查找到前面的那个词语，并绑定之，在这里是属于名称半匹配。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;关于方法的映射&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;action = "Index" 映射到 Index 方法，是属于全名匹配。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;默认的例子可能会带来一个&lt;strong&gt;误会&lt;/strong&gt;：让我们认为 "{controller}/{action}/{id}" ，这条规则一定会匹配 HomeController 类，实际不是这样。&lt;/p&gt;&lt;p&gt;我们在 Controllers 文件夹中添加一个另一个Controller类：TagsController&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;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;TagsController&amp;nbsp;:&amp;nbsp;Controller&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;GET:&amp;nbsp;/Tags/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;ActionResult&amp;nbsp;Index()&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: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;View();&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;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;并且添加对应的View:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;@{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Layout&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;DOCTYPE&amp;nbsp;html&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;html&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;head&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&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;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;Index&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;head&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;body&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&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;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this&amp;nbsp;is&amp;nbsp;tags&lt;br /&gt;&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;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;body&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;html&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;然后在浏览器中输入： &lt;a href="http://localhost:13812/tags/index/2"&gt;http://localhost:13812/tags/index/2&lt;/a&gt;&amp;nbsp;，主机名称部分根据你的实际情况修改，关键是后面的/tags/index/2&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;看到了不？ 浏览器中显示的是我们新添加的View的内容。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;所以： &lt;strong style="color: rgb(0, 0, 255);"&gt;路由的匹配是动态的，它绑定的只是某一条地址规则&lt;/strong&gt;： {controller}/{action}/{id}&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;地址中的 controller 部分你输入 home，它就映射到 homecontroller ，你输入tags, 它就映射到tagscontroller (只要它们已经存在就行)&lt;/p&gt;&lt;p&gt;action部分也是一样的道理，如果你输入 /home/about， 那么它就映射都homecontroller类的abut方法。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="color: rgb(0, 0, 255);"&gt;但是执行顺序是一定的： 首先映射类，然后映射方法&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;然后我们来说说路由设置中的的那个匿名对象， 它的作用是指定默认情况下应该映射到哪个类的哪个方法，什么是默认情况呢？ 看下面的地址：&lt;/p&gt;&lt;p&gt;/home&lt;/p&gt;&lt;p&gt;/hone/index&lt;/p&gt;&lt;p&gt;/home/index/1&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;它们都会映射到：controller = "Home", action = "Index"&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;routes.MapRoute(&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;"Default",&amp;nbsp;//&amp;nbsp;Route&amp;nbsp;name&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;"{controller}/{action}/{id}"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这时候我们就只能访问 /home/index/1 ，也就是/类名/方法名/id，三个参数一个都不能少，id可以修改为任意字符串 。 因为此时就是严格匹配路径参数&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2329537.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2012/01/26/2329537.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2012/01/03/webform-master-control.html</id><title type="text">WebForm中搭配母版页和用户控件页时候的事件加载顺序，附测试程序</title><summary type="text">在生产环境中，一个内容页(aspx)可能会包含数个用户控件(ascx)，而每个控件可能都会涉及到数据库访问。如果在内容页、母版页、控件页中各自使用自己的数据库访问方法，会造成很大的运行成本。这样的情况下，我们就应该重用数据库连接了，但是在这之前，需要搞清楚内容页、母版页和控件页的加载顺序。这篇文章中先给出它们的加载顺序，数据库重用部分留下一篇中再详解</summary><published>2012-01-02T16:56:00Z</published><updated>2012-01-02T16:56:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2012/01/03/webform-master-control.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2012/01/03/webform-master-control.html"/><content type="html">&lt;div&gt;在生产环境中，一个内容页(aspx)可能会包含数个用户控件(ascx)，而每个控件可能都会涉及到数据库访问。&lt;/div&gt;&lt;p&gt;如果在内容页、母版页、控件页中各自使用自己的数据库访问方法，会造成很大的运行成本。&lt;/p&gt;&lt;p&gt;这样的情况下，我们就应该重用数据库连接了，但是在这之前，需要搞清楚内容页、母版页和控件页的加载顺序。&lt;/p&gt;&lt;p&gt;这篇文章中先给出它们的加载顺序，数据库重用部分留下一篇中再详解 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以下是我测试出来的结果，阅读顺序是从上到下 ：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_webform.png" height="470" border="0" width="549" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;测试程序下载地址：http://files.cnblogs.com/kvspas/form_master_control.zip&lt;br /&gt;&lt;/p&gt;&lt;p&gt;执行结果就是图中的模样，我的开发环境是asp.net4.0，理论上你可以把它修改到3.5和2.0。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2310617.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2012/01/03/webform-master-control.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2011/12/30/sina-oauth-21323.html</id><title type="text">新浪OAuth网站登陆连接，请求access_token时遇到21323 miss client id or secret 的解决方案</title><summary type="text">我始终认为是我的错误，而不是新浪的错误，所以，电脑屏幕翻转了180度，没发现什么特别的隐藏说明，接着又拿一块大镜子来看镜像，还是没发现什么，最后使出了绝招：  把文档的所有文字按照奇数和偶数都排列着读一遍，依旧无解。 终于： 我开始觉得不是我的错了，而是新浪的错。 本文给出ASP.NET 4.0的解决方案以及实现思路。</summary><published>2011-12-29T23:11:00Z</published><updated>2011-12-29T23:11:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2011/12/30/sina-oauth-21323.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2011/12/30/sina-oauth-21323.html"/><content type="html">&lt;div&gt;本文的环境仅仅是针对最新的新浪oauth2.0， 早期的1.0方式我不太了解，也不在本文的范畴内。&lt;/div&gt;&lt;p&gt;解决方案给出两种： &lt;strong style="color: #0000ff;"&gt;1&lt;/strong&gt;，描述解决思路，各位自己去实现。&amp;nbsp; &lt;strong&gt;&lt;span style="color: #0000ff;"&gt;2&lt;/span&gt;&lt;/strong&gt;，给出我开发好的asp.net 4.0 dll，直接傻瓜化加载使用。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;当时，我把电脑屏幕翻转了180度，想看看新浪的文档里面是不是有些什么隐藏说明（因为有先例：九阳真经就是这么来的），要不然为什么我已经正确提交了各个POST参数，依然得到： '{"error":"invalid_request","error_code":21323,"request":"/2/oauth2/access_token","error_uri":"/2/oauth2/access_token","error_description":"miss client id or secret"}'&amp;nbsp; 这样的错误提示。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;一切都已经按照文档的说来做了，参见：http://open.weibo.com/wiki/OAuth2/access_token。 我自视水平不高，虽然是个初学者，但是这样的配置还是能够搞定的，可结果偏偏还是错误。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;我也不想再列举自己的各种证据了，需要搭建的环境太麻烦，没那功夫，反正遇到这问题的人多的是，搜一搜别人的例子就知道，都是一样的遭遇。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;我始终认为是我的错误，而不是新浪的错误，所以，电脑屏幕翻转了180度，没发现什么特别的隐藏说明，接着又拿一块大镜子来看镜像，还是没发现什么，最后使出了绝招：&amp;nbsp; 把文档的所有文字按照奇数和偶数都排列着读一遍，依旧无解。 终于： 我开始觉得不是我的错了，而是新浪的错。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;文档中有这么一句提示：&lt;div&gt;&lt;p&gt;&lt;strong&gt;HTTP请求方式：POST&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;这句话太简单了，你们想要人家POST什么？让人认为所有的参数都要作为POST发送过去。可事实偏偏不是这样的， OAuth的服务端只要看到本次提交的行为是POST就行， 至于POST集合里面有没有数据，有些什么数据，它才不会管，所以，无论我们在POST里面添加了什么键|值、无论怎么切换顺序，都是错误的，因为它就没有去读取。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;解决办法只有本着死马当活马医的态度： 乱搞！&lt;/p&gt;&lt;p&gt;最终还是让我发现了----&lt;strong style="color: #ff0000;"&gt;需要使用GET和POST的混合方式来提交&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;提交的地址应该是：&lt;div&gt;&lt;strong style="color: #0000ff;"&gt;"https://api.weibo.com/oauth2/access_token?client_id={0}&amp;amp;client_secret={1}&amp;amp;grant_type=authorization_code&amp;amp;code={2}&amp;amp;redirect_uri={3}"&lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="color: #0000ff;"&gt;请求方式：POST&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="color: #0000ff;"&gt;POST中的数据：空！&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;0，1，2，3 对应你自己的参数值&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;就是这样，终于正确获得token值，服务器只管你的method是POST就行了，你的实际参数都是在GET里面的。&lt;/p&gt;&lt;p&gt;顺便提一下： 如果采用basic方式在http头中添加key和secret， 最后依然是大同小异的错误，只不过是提示变成了找不到你的redirect_uri参数。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="color: #ff0000;"&gt;好了，解决思路说完了。如果你不愿自己动手，并且你也和我一样是ASP.NET 4.0开发的话，可以接着往下看：&lt;/strong&gt;&lt;br style="color: #ff0000;" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;下载地址：http://files.cnblogs.com/kvspas/SinaOAuth_20111230_v1.zip&lt;br /&gt;&lt;/p&gt;&lt;p&gt;组件中已经封装好了直接获取用户基本信息的功能，并且已经强类型化。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;组件的一部分功能使用了JSON.NET库(http://json.codeplex.com/)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;使用办法：&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;首先，&lt;strong&gt;&lt;span style="color: #0000ff;"&gt;必须保证运行环境是4.0&lt;/span&gt;&lt;/strong&gt;，因为解析JSON的方式涉及到dynamic类型 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;1： 页面1&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;SinaOAuth;&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;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&amp;nbsp;login&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;SinaOAuthLogin(&lt;span style="color: #800000;"&gt;"你的key&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: #800000;"&gt;你的回调地址&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #800000;"&gt;&lt;/span&gt;&lt;br /&gt;Response.Redirect(login.SinaOAuthLoginUri);&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;2：页面2&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;SinaOAuth;&lt;br /&gt;&lt;br /&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: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;本页面的url格式应该是这样的：&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000; text-decoration: underline;"&gt;http://www.abc.com/sinaoauth.aspx?code=427bbf62b4b91339951b436c4880e9ef&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&amp;nbsp;code&amp;nbsp;=&amp;nbsp;Request.QueryString[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;code&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;SinaOAuthApi&amp;nbsp;s&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;SinaOAuthApi(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;你的key&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: #800000;"&gt;你的secret&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: #800000;"&gt;你的回调地址&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&amp;nbsp;tokenValue&amp;nbsp;=&amp;nbsp;s.RequestTokenData(code);&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;包含了uid、expires_in、access_token，请求其它API时候使用&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;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&amp;nbsp;user&amp;nbsp;=&amp;nbsp;s.RequestUserInfo; //获取用户基本信息&lt;br /&gt;&lt;br /&gt;Response.Write(user.name);&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;好了，就这么简单。 最核心的身份验证部分已经帮你通过了，其它的API就由你自由发挥了。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;使用其它语言的朋友请参照解决思路自行编码。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这是新浪API团队设计思维上的一个BUG，之所以说是&amp;#8220;设计思维&amp;#8221;上，是因为没有对生产环境的运行带来坏处，但是这样的文档说明存在二义性、POST不是POST，GET不是GET的机制，难以专业化， 这个系统还有很大的改善空间。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2306894.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2011/12/30/sina-oauth-21323.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2011/12/11/2283859.html</id><title type="text">Team Foundation Server 2010配置数据库遇到“与某个指定的域或工作组帐户冲突”的解决方案</title><summary type="text">一开始没有认真看错误信息，于是到处搜索解决办法， 不是叫你杀毒就是叫你重启，包括某个知名的社区在内，除了假惺惺的“你好”二字外，和百度知道没有本质区别。回来硬头皮搞，过程就不详述了，其实，错误描述已经包含了答案，只不过我们的心里作用让我们很少去注释他们。</summary><published>2011-12-11T04:32:00Z</published><updated>2011-12-11T04:32:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2011/12/11/2283859.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2011/12/11/2283859.html"/><content type="html">&lt;div style="padding-left: 2%; padding-right: 2%"&gt;如果修改了计算机名或者工作组或者设置了新的域， 安装和配置Team Foundation Server的时候很可能遇到如下的错误：&lt;br /&gt;&lt;br /&gt;&lt;em&gt;错误&amp;nbsp;[ 配置数据库 ] TF255507: 以下 SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突: WIN-9ILOU7R0E13\Administrator。域或工作组帐户为: STORAGESERVER\Administrator。选择的用于承载 Team Foundation Server 数据库的服务器为: StorageServer\sqlserver。&lt;br /&gt;可以通过重命名冲突的登录来解决此问题。为此，请在运行 SQL Server 的计算机上打开命令提示符，并执行以下命令:&lt;br /&gt;sqlcmd -E -S "StorageServer\sqlserver" -Q "ALTER LOGIN [WIN-9ILOU7R0E13\Administrator] WITH NAME = [STORAGESERVER\Administrator]"&lt;br /&gt;有关详细信息，请参见 Microsoft 网站上的以下页面: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=183408"&gt;http://go.microsoft.com/fwlink/?LinkId=183408&lt;/a&gt;&lt;/em&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;一开始没有认真看错误信息，于是到处搜索解决办法， 不是叫你杀毒就是叫你重启，包括某个知名的社区在内，除了假惺惺的&amp;#8220;你好&amp;#8221;二字外，和百度知道没有本质区别。&lt;br /&gt;&lt;br /&gt;回来硬头皮搞，过程就不详述了，其实，错误描述已经包含了答案，只不过我们的心里作用让我们很少去&lt;span&gt;注释他们。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;请&lt;/span&gt;&lt;span&gt;注意里面的：&lt;/span&gt;&lt;em&gt;sqlcmd -E -S "StorageServer\sqlserver" -Q "ALTER LOGIN [WIN-9ILOU7R0E13\Administrator] WITH NAME = [STORAGESERVER\Administr&lt;/em&gt;&lt;em&gt;ator]"&lt;/em&gt;&lt;br /&gt;&amp;nbsp;这么一句话，以管理员身份打开命令提示符， 一定要用管理员身份，然后复制进去执行，问题就解决了。&lt;br /&gt;&lt;br /&gt;*注： 上面这条命令是我自己的机器参数， 不要复制我的命令， 要看你自己的错误信息相对位置。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2283859.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2011/12/11/2283859.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2011/05/06/delegate-about.html</id><title type="text">delegate详细解析</title><summary type="text">Delegate 实际上就是一个特殊的类型，只不过是我们的声明的时候可以简化写法，系统实际上还是会编译为sealed class , 在这个特殊的类中，会使用一个拥有相同签名的方法来实际执行。</summary><published>2011-05-05T21:32:00Z</published><updated>2011-05-05T21:32:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2011/05/06/delegate-about.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2011/05/06/delegate-about.html"/><content type="html">&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Delegate&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;实际上是一个类型（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;）。这一点我们可以做一个实验例子。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;using&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;delegate&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Print&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt; message);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;sealed&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Testing&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="color: #2b91af"&gt;Print&lt;/span&gt; p) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p(&lt;span style="color: #a31515"&gt;"testing"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;sealed&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Program&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; prt(&lt;span style="color: blue"&gt;string&lt;/span&gt; str){ &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(str);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Testing&lt;/span&gt;.Execute(prt);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;然后我们通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IL&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;代码观察：&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/1.png" width="560" height="310" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;代理，也就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;delegate Print&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;实际上是一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;sealed class &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，见&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;特征&lt;/span&gt;&lt;span style="color: red" lang="EN-US"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，继承于&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;System.&lt;span style="color: #2b91af"&gt;MulticastDelegate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;特征&lt;/span&gt;&lt;font face="Calibri"&gt;&lt;span style="color: red" lang="EN-US"&gt;2&lt;/span&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;更明显，直接说明了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Print&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;就是一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;class&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;构造函数和两个多线程方法我们暂且不谈，&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;这里的重点是它具备一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Invoke &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;方法，&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;类型是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;void, &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;签名类型是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;string &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;。&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;我们用两个方法来试探一下这个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Invoke&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是什么，&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;首先，我们通过代码调用顺序，查找一下&lt;/span&gt;&lt;span style="font-family: NSimSun; color: #2b91af; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;Testing &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;类的静态方法&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Execute(&lt;span style="color: #2b91af"&gt;Print&lt;/span&gt; p) &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;做了些什么：&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/2.png" width="580" height="198" /&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;实际上调用了&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;Print&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;对象的&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;Invoke &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;方法，参数就是之前压入栈的&amp;#8220;&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;&amp;#8221;。&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;这下我们明白了，&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; Invoke&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;方法就是我们定义的&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;delegate&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Print&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt; message); &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;的真身。&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;再来一个方法证实一下这个猜测，我们修改一下&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;源代码：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;using&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;delegate&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Print&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt; message);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;delegate&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dele2&lt;/span&gt;(&lt;span style="color: blue"&gt;int&lt;/span&gt; i, &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt; d); &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: green; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;增加一个新的代理&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;sealed&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Testing&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="color: #2b91af"&gt;Print&lt;/span&gt; p , &lt;span style="color: #2b91af"&gt;Dele2&lt;/span&gt; d) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p(&lt;span style="color: #a31515"&gt;"testing"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;d(10, &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;sealed&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Program&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; prt(&lt;span style="color: blue"&gt;string&lt;/span&gt; str){ &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(str);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ptr2(&lt;span style="color: blue"&gt;int&lt;/span&gt; i, &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt; d) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0},{1}"&lt;/span&gt;,i,d)); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Testing&lt;/span&gt;.Execute(prt,ptr2);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;然后我们再来看看生成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IL&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;代码：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/3.png" width="553" height="415" /&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;这下勿须置疑了，我们可以这样子认为：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Delegate &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;实际上就是一个特殊的类型，只不过是我们的声明的时候可以简化写法，系统实际上还是会编译为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;sealed class , &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;在&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="color: red"&gt;这个特殊的类中，会使用一个拥有相同签名的方法来实际执行&lt;/span&gt;&lt;/strong&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;最后，做一次验证，我们再修改一下代码：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;using&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;delegate&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Print&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt; message);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;delegate&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dele2&lt;/span&gt;(&lt;span style="color: blue"&gt;int&lt;/span&gt; i, &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt; d);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;sealed&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Testing&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="color: #2b91af"&gt;Print&lt;/span&gt; p , &lt;span style="color: #2b91af"&gt;Dele2&lt;/span&gt; d) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p.Invoke(&lt;span style="color: #a31515"&gt;"testing"&lt;/span&gt;); &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: green; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;改动点&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;d.Invoke(10, &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now); &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: green; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;改动点&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: green; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;我们直接调用它们的&lt;/span&gt;&lt;span style="font-family: NSimSun; color: green; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;Invoke&lt;/span&gt;&lt;span style="font-family: 宋体; color: green; font-size: 9.5pt; mso-ascii-font-family: NSimSun; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: NSimSun; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt"&gt;方法&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; color: blue; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;sealed&lt;/span&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Program&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; prt(&lt;span style="color: blue"&gt;string&lt;/span&gt; str){ &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(str);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ptr2(&lt;span style="color: blue"&gt;int&lt;/span&gt; i, &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt; d) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0},{1}"&lt;/span&gt;,i,d)); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Testing&lt;/span&gt;.Execute(prt,ptr2);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: NSimSun; font-size: 9.5pt; mso-bidi-font-family: NSimSun; mso-font-kerning: 0pt" lang="EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;成功执行：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;/o:p&gt;&lt;/span&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/4.png" width="556" height="210" /&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;/p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2038444.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2011/05/06/delegate-about.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2011/05/01/2034047.html</id><title type="text">LINQ查询中，对于值类型的比较应注意使用Value属性</title><summary type="text">例如，对于入住天数，如果我们使用 ：data.Where(o =&gt; o.custom_livedays.Equals(_livedays));在语义上是没有问题的，但是不会得到我们想要的答案，正确的写法是：data.Where(o =&gt; o.custom_livedays.Value.Equals(_livedays)); 仅对于值类型是如此，如果是引用类型，例如string, 那么就用不着value属性了。例如：data.Where(o =&gt; o.custom_name.Equals("字符串值"));</summary><published>2011-05-01T12:23:00Z</published><updated>2011-05-01T12:23:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2011/05/01/2034047.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2011/05/01/2034047.html"/><content type="html">&lt;p&gt;例如，对于入住天数，如果我们使用 ：&lt;/p&gt;&#xD;
&lt;p&gt;data.Where(o =&amp;gt; o.custom_livedays.Equals(_livedays));&lt;/p&gt;&#xD;
&lt;p&gt;在语义上是没有问题的，但是不会得到我们想要的答案，正确的写法是：&lt;/p&gt;&#xD;
&lt;p&gt;data.Where(o =&amp;gt; o.custom_livedays.&lt;span style="color: #ff0000"&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/span&gt;.Equals(_livedays));&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;仅对于值类型是如此，如果是引用类型，例如string, 那么就用不着value属性了。例如：&lt;/p&gt;&#xD;
&lt;p&gt;data.Where(o =&amp;gt; o.custom_name.Equals("字符串值"));&lt;span style="display: none"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2034047.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2011/05/01/2034047.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2011/04/12/abstract-name.html</id><title type="text">从古城5号到变量命名规范，多一些抽象也许会更好</title><summary type="text">昨天我走在丽江古城里，路过一家店，当时那条路的名字忘记了，暂且先叫“A路”吧，  而那家店面就叫“A路5号”，它的门牌号确实也是A路的5号。  这么一看就联想到问题了</summary><published>2011-04-12T08:07:00Z</published><updated>2011-04-12T08:07:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2011/04/12/abstract-name.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2011/04/12/abstract-name.html"/><content type="html">&lt;span style="font-family: georgia, helvetica, times, serif; font-size: 16px; color: #eeeeee; line-height: 25px; "&gt;&#xD;
&lt;p&gt;昨天我走在丽江古城里，路过一家店，当时那条路的名字忘记了，暂且先叫&amp;#8220;A路&amp;#8221;吧，  而那家店面就叫&amp;#8220;A路5号&amp;#8221;，它的门牌号确实也是A路的5号。  这么一看就联想到问题了：&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
1 假如以后搬迁店址&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
2 假如以后街道改名&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
还有更多的假如发生的情况，就不一一列举了，只要发生其中一个，那么店名与门牌号就不再匹配了，进一步地，也许隔壁或者对面就变成新的"A路5号"了。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
当然这样的事情有很多的解决方案，实际上发生那些事情的可能性也微乎其微。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
但是如果把这样的事情放到软件架构设计中，那么出大问题的机率就不容忽视了。例如我现在正在设计windows phone7的一个网络访问模组，一开始我是想把namespace命名为：Kvspas.WindowsPhone7.Net 。 但是后来又去掉&amp;#8220;7&amp;#8221;，改为Kvspas.WindowsPhone.Net. 因为下一代WindowsPhone也一样需要使用它，那时候&amp;#8220;7&amp;#8221;这个数字就不适合了（街道改名了）。再后来，WindowsPhone这个词汇还是不合适，因为同属于SilverLight与XNA架构的浏览器SilverLight和桌面脱机SilverLight中也需要使用它，于是又改为了Kvspas.SmartDevice.Net。看似可以了，最后还是觉得有些地方不对，SmartDevice 表示智能设备，泛指手机、平板电脑等随身携带的设备，与通用型windows系统还是相差甚远的。 最终，选用了SmartClient 这个词：Kvspas.SmartClient.Net 。取智能客户端之意，Client一词可指硬件，也可指软件，而Device却只能表示硬件。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
严谨的命名法在整个软件架构中相当重要，直接关系到开发者自己在三个月后还能不能明白当初开发的这个模块是干什么用的。一款可用性产品包含很多很多的模组，胡乱命名只能够带来&amp;#8220;破窗户效应&amp;#8221;。  14年前，16系统开始升级到32位系统的时候，当时的工程师把系统盘中那个文件夹取名为System32，&amp;#8220;32&amp;#8221;一词就是典型的错误例子（在语义上绑定了CPU架构，其实没必要）。今天不得不用一个新的SysWOW64文件夹来区分64位系统的主文件。以及Program Files(x86)区分32位程序集。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
进一步说，我们平时新建一个文件夹，无论保存什么东西，都不应该使用它默认的&amp;#8220;新建文件夹(1)&amp;#8221;、&amp;#8220;新建文件夹(2)&amp;#8221;这样的名称。一旦这样的文件夹多了，自己的很多文件就再难以维护整理了。&lt;/p&gt;&#xD;
&lt;/span&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2013793.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2011/04/12/abstract-name.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kvspas/archive/2010/08/31/security-extends.html</id><title type="text">在继承机制中引用继承权校验</title><summary type="text">在某些特殊情况下，我们需要把类型设计为public class（这是前提条件，所以internal 声明无效），但是却又不想给人无条件调用或者继承该类，这时候我们可以把类设计为 public abstract class，就避免了直接创建它的对象，但是不想被无条件继承，则要动一番脑经了。这样的情况在实际运用中还是存在的： 比如某个DLL中的某些公共类，只有具备某些权限的开发人员才能够继承之， 或者是某些收费组件，必须提供序列号，才能够继承调用。</summary><published>2010-08-31T15:05:00Z</published><updated>2010-08-31T15:05:00Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kvspas/archive/2010/08/31/security-extends.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2010/08/31/security-extends.html"/><content type="html">&lt;p&gt;引言：在某些特殊情况下，我们需要把类型设计为public class（这是前提条件，所以internal 声明无效），但是却又不想给人无条件调用或者继承该类，这时候我们可以把类设计为 public abstract class，就避免了直接创建它的对象，但是不想被无条件继承，则要动一番脑经了。首先，abstract&amp;nbsp; class 就是设计来被人继承的，我们不可能用sealed 来声明它。 &lt;/p&gt;&#xD;
&lt;p&gt;这样的情况在实际运用中还是存在的： 比如某个DLL中的某些公共类，只有具备某些权限的开发人员才能够继承之， 或者是某些收费组件，必须提供序列号，才能够继承调用。&lt;/p&gt;&#xD;
&lt;p&gt;在本文的简单例子中，虽然通过DLL反汇编可以间接获取继承权序列号，但是相信在实际开发中，我们不可能通过一个简单的字符串判断就如此了事，这是另一个话题了。不在本文讨论范畴。&lt;/p&gt;&#xD;
&lt;p&gt;正文：在继承机制中，父类的构造函数一定先于子类被初始化。就像如下的IL所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/first_il.PNG" width="398" height="544" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;基于这样的原理，我们可以先尝试在父类构造函数中加入序列号判断（为了方便描述问题，在这里暂且用简单的&lt;/span&gt;&amp;#8221;123456&amp;#8221;&lt;span style="font-family: 宋体"&gt;作为序列号示例），一个简单的示例：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/first.PNG" width="350" height="344" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt"  align="left"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;基类提供了一个方法：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;DoSomething()&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，在实际中也许会是一组甚至好几组方法，其内部算法不会对外公开，外部子类需要一定的权限才可以通过继承基类来间接调用。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/span&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;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IMethodable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DoSomething();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Parent&amp;nbsp;:&amp;nbsp;IMethodable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_mykey&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&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&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DoSomething()&amp;nbsp;{&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;doing......&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&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&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&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&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Parent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;(ExtendsKey.Equals(_mykey)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Exception(&lt;/span&gt;&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;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;或者把本次错误记录到日志&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Child1&amp;nbsp;:&amp;nbsp;Parent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;override&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;子类必须提供一个序列号，如果序列号不对，父类构造函数在运行时抛出错误，整个程序运行中断。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;至此，我们在理论上解决了问题。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;但是在实际应用中，这个算法存在几个缺点：&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" align="left"&gt;&lt;span style="font-family: 宋体"&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;每次运行程序，继承机制都会进行一次&lt;/span&gt;String.&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt; Equals&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;判断，而一个有意义的程序在正常运行的时候是不需要反复作出错判断的，并且&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;String.&lt;/span&gt;&lt;span style="font-family: 宋体"&gt; Equals&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;每次都会构造一个新的字符串，这样的效率很难让人接受。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" align="left"&gt;&lt;span style="font-family: 宋体"&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在DLL内部如果有别的类需要继承Parent基类的时候，同样需要进行继承权校验，例如：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&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;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerChild&amp;nbsp;:&amp;nbsp;Parent&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;DLL内部的类，没有必要进行继承权校验，但是却不得不这么做&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;override&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;&lt;/div&gt;&#xD;
&lt;p style="text-align: left; text-indent: 0cm; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0"  align="left"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;这样的做法就更愚蠢了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 0cm; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0"  align="left"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" align="left"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;更甚之，无论是&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;内部或者外部，当有多个子类需要同时继承自&lt;/span&gt;Parent&lt;span style="font-family: 宋体"&gt;基类的时候，每一个子类都需要重写&lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;ExtendsKey &lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;属性；倘若我们通过以下方法：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&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;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;AbstractChild&amp;nbsp;:&amp;nbsp;Parent&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;增加一层中间类&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;override&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Child1&amp;nbsp;:&amp;nbsp;AbstractChild&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Child2&amp;nbsp;:&amp;nbsp;AbstractChild&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 18pt; margin: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0"  align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;看似可以避免重复代码，但同时却多出了一个缺陷：如果外部程序直接继承 &lt;/span&gt;&lt;span style="font-family: 旝?夒麷; color: #2b91af; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;font face="Calibri"&gt;AbstractChild &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;，便绕过了序列号判断，则&lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; color: red; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;整个安全机制便形同虚设。&lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;综上所述，我们需要对整个算法进行重构：避免多余判断、避免重复代码、保证安全机制。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;我们对Parent类进行分解，让继承权判断和业务方法分离：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&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;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ISecuritable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerMethod&amp;nbsp;:&amp;nbsp;IMethodable&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;它的子类是public，所以它也必须是&amp;nbsp;public&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;internal&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerMethod()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;internal声明的构造函数保证了外部程序集不可继承该类&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.GetType().ToString());&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&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;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: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DoSomething()&amp;nbsp;{&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;doing....&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&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;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;必须有继承权才能够继承&lt;br /&gt;&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;&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;typeparam&amp;nbsp;name="Key"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Parent&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Key&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;:&amp;nbsp;InnerMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;where&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Key&amp;nbsp;:&amp;nbsp;ISecuritable,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_mykey&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;假设实际中这个验证码是通过数据源获取，这里简化之&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ISecuritable&amp;nbsp;_key;&lt;br /&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: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Parent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(_check())&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&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;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Exception(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;error&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Func&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_check&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;:&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;(_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Key()).ExtendsKey.Equals(_mykey)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;:&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;.Equals(_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;如此一来，我们在&lt;span lang="EN-US"&gt;DLL&lt;/span&gt;内部可以这样实现业务逻辑：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&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;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerClass1&amp;nbsp;:&amp;nbsp;InnerMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;在DLL内部的继承法，就不存在任何性能损耗了。&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerClass2&amp;nbsp;:&amp;nbsp;InnerMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #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;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;其设计图如下所示：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;&lt;/span&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/inner.PNG" width="533" height="476" /&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;InnerMethod &lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;作为带有 internal构造函数 的 public abstract class , 外部程序只能够看到它，但是却无法调用和继承它。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;此时Parent只作为 InnerMethod 的对外封装，继承Parent需要有凭据（泛型参数&lt;/span&gt;&lt;span style="font-family: 旝?夒麷; font-size: 9pt"&gt;Key&lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt"&gt;），其外部调用如此实现：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&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;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SecurityFactory&amp;nbsp;:&amp;nbsp;Isecuritable&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;相当于一个凭据&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OutsideClass:Parent&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;SecurityFactory&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;在实际中，这就相当于第三方开发插件。&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;｝&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: 旝?夒麷; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;&lt;font face="Calibri"&gt;虽然在&lt;span lang="EN-US"&gt;Parent&lt;/span&gt;中我们不能完全去掉&lt;span lang="EN-US"&gt;if&lt;/span&gt;判断，但是在成功的继承中，仅需要判断一个静态对象是否等于&lt;span lang="EN-US"&gt;null &lt;/span&gt;（&lt;span lang="EN-US"&gt;_key != &lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;/span&gt;），相比起之前的&lt;span lang="EN-US"&gt;String.Equals&lt;/span&gt;，其性能损耗已经小到可以忽略不计了。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"  align="left"&gt;&lt;span style="font-family: 旝?夒麷; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;&lt;font face="Calibri"&gt;至此，我们解决了所有问题，下面是完整的&lt;span lang="EN-US"&gt;DLL&lt;/span&gt;代码和客户端代码。如果哪位有更好的实现方法，欢迎讨论。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '微软雅黑','sans-serif'; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&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;" onclick="cnblogs_code_show('9e8c6f23-9da8-4859-9e5f-5068221f2c08')"&gt;&lt;img style="display: none" id="code_img_opened_9e8c6f23-9da8-4859-9e5f-5068221f2c08"  onclick="cnblogs_code_hide('9e8c6f23-9da8-4859-9e5f-5068221f2c08',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_9e8c6f23-9da8-4859-9e5f-5068221f2c08" &gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ISecuritable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IMethodable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DoSomething();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerMethod&amp;nbsp;:&amp;nbsp;IMethodable&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;它的子类是public，所以它也必须是&amp;nbsp;public&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;internal&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerMethod()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;internal声明的构造函数保证了外部程序集不可继承该类&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.GetType().ToString());&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&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;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: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DoSomething()&amp;nbsp;{&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;doing....&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&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;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;必须有继承权才能够继承&lt;br /&gt;&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;&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;typeparam&amp;nbsp;name="Key"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Parent&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Key&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;:&amp;nbsp;InnerMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;where&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Key&amp;nbsp;:&amp;nbsp;ISecuritable,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_mykey&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;假设实际中这个验证码是通过数据源获取，这里简化之&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ISecuritable&amp;nbsp;_key;&lt;br /&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: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Parent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(_check())&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&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;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Exception(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;error&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Func&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_check&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;:&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;(_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Key()).ExtendsKey.Equals(_mykey)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;:&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;.Equals(_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerClass1&amp;nbsp;:&amp;nbsp;InnerMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerClass2&amp;nbsp;:&amp;nbsp;InnerMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&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;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('3de5ad0d-3a14-4b75-b98a-6cd387e8aa16')"&gt;&lt;img style="display: none" id="code_img_opened_3de5ad0d-3a14-4b75-b98a-6cd387e8aa16"  onclick="cnblogs_code_hide('3de5ad0d-3a14-4b75-b98a-6cd387e8aa16',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_3de5ad0d-3a14-4b75-b98a-6cd387e8aa16" &gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SecurityFactory&amp;nbsp;:&amp;nbsp;ISecuritable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ExtendsKey&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456ee&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OutsideClass:Parent&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;SecurityFactory&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IMethodable&amp;nbsp;Create&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&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;var&amp;nbsp;item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OutsideClass();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Main(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IMethodable&amp;nbsp;chi&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InnerClass2();&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;chi.DoSomething();&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;var&amp;nbsp;outside&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IMethodable[]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutsideClass.Create,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutsideClass.Create,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutsideClass.Create&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(var&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;outside)&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;i.DoSomething();&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/1814153.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2010/08/31/security-extends.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
