<?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-18T09:28:06Z</updated><author><name>梁逸晨</name><uri>http://www.cnblogs.com/kvspas/</uri></author><generator>feed.cnblogs.com</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/17/2355689.html</id><title type="text">Metadata publishing for this service is currently disabled 的解决偏方</title><summary type="text">我的这个方法一定是不登大雅之堂的，所以称之为“偏方”，但是对于解决启用ajax的wcf出现 Metadata publishing for this service is currently disabled 一定有效。</summary><published>2012-02-17T05:56:00Z</published><updated>2012-02-17T05: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/02/17/2355689.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kvspas/archive/2012/02/17/2355689.html"/><content type="html">&lt;p&gt;做一个支持ajax的wcf，然而却莫名其妙出现了 Metadata publishing for this service is currently disabled ，经历各种排查，把问题简化到最小：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="center"&gt;&lt;strong&gt;&lt;span style="font-size: 14pt; color: red;"&gt;新建一个空项目、新建一个没有任何内容的支持ajax的wcf文件，然后运行 &lt;/span&gt;&lt;br style="color: red;" /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;依然特么的 Metadata publishing for this service is currently disabled 。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="color: red;"&gt;照着错误提示的说明，修改了web.config 的&lt;/span&gt;&lt;span style="color: red;"&gt; system.serviceModel&lt;/span&gt;&amp;nbsp; &lt;span style="color: red;"&gt;中的那两节配置（name绝对没设置错）。&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;还是特么的&amp;nbsp; &lt;div&gt;Metadata publishing for this service is currently disabled 。&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在尝试了各种各样的解决方案之后（编辑Web.config、修改IIS设置、甚至都重新注册了.net 3.0），没有办法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这已经不是常规办法可以解决的。 古往今来的改朝换代都离不开一个规律：乱世。&amp;nbsp;&amp;nbsp;所以，就乱搞吧。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt;"&gt;&lt;span style="color: #00ff00;"&gt;以下是乱搞步骤： &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;br style="color: #00ff00;" /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1 ：把 system.serviceModel 节以及它下属的所有内容删除，不要犹豫，删！&lt;/p&gt;&lt;p&gt;2 ：先放置一个傀儡： 新建一个常规的wcf文件(不要从别处复制文件进来，&lt;span style="color: red;"&gt;一定要新建)&lt;/span&gt;，注意是常规的，也就是最普通的那种，不带ajax的，把它起名try1.svc。&lt;/p&gt;&lt;p&gt;这时候web.config会自动添加一些东西进去了，别去管它加了什么，现在是非常规方法，研究是没有意义的。&lt;/p&gt;&lt;p&gt;&lt;div align="center"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_wcf-1.png" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3 ：最后，建立我们需要的真正的带ajax的wcf文件，&lt;span style="color: red;"&gt;同理，一定要新建&lt;/span&gt;。命名为real.svc。&lt;br /&gt;&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/347052/r_wcf-2.png" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好了，这时候运行测试real.svc，一定能够正常运行了。 即使是/js也没问题了。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4 ：事成之后，记得在web.config文件中把try1相关的东西删掉。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不要问我为什么，也劝你别去追究为什么， 系统错误提示首先对我们说谎， 谎言是没有必要问为什么的。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kvspas/aggbug/2355689.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kvspas/archive/2012/02/17/2355689.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><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">&lt;p&gt;&lt;span&gt; &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;&amp;nbsp;&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;&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-t1.png" width="282" height="190" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;接下来就可以开始正题了：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp; &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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;至于数据库文件名，可以任意。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后，在页面对应代码中添加：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果第一次运行之后，再去修改、添加、删除表的字段、删除数据库文件，那么程序一定会出错，下一篇再说怎么解决。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &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"> 某些类的某些属性，由于实现了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 = "Home" 会映射到HomeController类， 而HomeController类的类名，我们需要拆分为两个单词去理解： "Home"+"Controller"。 路由会查找到前面的那个词语，并绑定之，在这里是属于名称半匹配。关于方法的映射：action = "Index" 映射到 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; &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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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:10px;"&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;并且添加对应的View:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;看到了不？ 浏览器中显示的是我们新添加的View的内容。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="color: rgb(0, 0, 255);"&gt;但是执行顺序是一定的： 首先映射类，然后映射方法&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;它们都会映射到：controller = "Home", action = "Index"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果我们把匿名对象去掉，把路由修改成这样：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这时候我们就只能访问 /home/index/1 ，也就是/类名/方法名/id，三个参数一个都不能少，id可以修改为任意字符串 。 因为此时就是严格匹配路径参数&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以下是我测试出来的结果，阅读顺序是从上到下 ：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;测试程序下载地址：http://files.cnblogs.com/kvspas/form_master_control.zip&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;执行结果就是图中的模样，我的开发环境是asp.net4.0，理论上你可以把它修改到3.5和2.0。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我始终认为是我的错误，而不是新浪的错误，所以，电脑屏幕翻转了180度，没发现什么特别的隐藏说明，接着又拿一块大镜子来看镜像，还是没发现什么，最后使出了绝招：&amp;nbsp; 把文档的所有文字按照奇数和偶数都排列着读一遍，依旧无解。 终于： 我开始觉得不是我的错了，而是新浪的错。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;0，1，2，3 对应你自己的参数值&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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:10px;"&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;2：页面2&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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 class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/kvspas/2.png" width="580" height="198" /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal" 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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&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;&lt;p class="MsoNormal"&gt;&amp;nbsp;&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;&lt;p&gt;data.Where(o =&amp;gt; o.custom_livedays.Equals(_livedays));&lt;/p&gt;&lt;p&gt;在语义上是没有问题的，但是不会得到我们想要的答案，正确的写法是：&lt;/p&gt;&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;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;仅对于值类型是如此，如果是引用类型，例如string, 那么就用不着value属性了。例如：&lt;/p&gt;&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;&lt;p&gt;昨天我走在丽江古城里，路过一家店，当时那条路的名字忘记了，暂且先叫&amp;#8220;A路&amp;#8221;吧，  而那家店面就叫&amp;#8220;A路5号&amp;#8221;，它的门牌号确实也是A路的5号。  这么一看就联想到问题了：&lt;br /&gt;&lt;br /&gt;1 假如以后搬迁店址&lt;br /&gt;&lt;br /&gt;2 假如以后街道改名&lt;br /&gt;&lt;br /&gt;还有更多的假如发生的情况，就不一一列举了，只要发生其中一个，那么店名与门牌号就不再匹配了，进一步地，也许隔壁或者对面就变成新的"A路5号"了。&lt;br /&gt;&lt;br /&gt;当然这样的事情有很多的解决方案，实际上发生那些事情的可能性也微乎其微。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;但是如果把这样的事情放到软件架构设计中，那么出大问题的机率就不容忽视了。例如我现在正在设计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;&lt;br /&gt;严谨的命名法在整个软件架构中相当重要，直接关系到开发者自己在三个月后还能不能明白当初开发的这个模块是干什么用的。一款可用性产品包含很多很多的模组，胡乱命名只能够带来&amp;#8220;破窗户效应&amp;#8221;。  14年前，16系统开始升级到32位系统的时候，当时的工程师把系统盘中那个文件夹取名为System32，&amp;#8220;32&amp;#8221;一词就是典型的错误例子（在语义上绑定了CPU架构，其实没必要）。今天不得不用一个新的SysWOW64文件夹来区分64位系统的主文件。以及Program Files(x86)区分32位程序集。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;进一步说，我们平时新建一个文件夹，无论保存什么东西，都不应该使用它默认的&amp;#8220;新建文件夹(1)&amp;#8221;、&amp;#8220;新建文件夹(2)&amp;#8221;这样的名称。一旦这样的文件夹多了，自己的很多文件就再难以维护整理了。&lt;/p&gt;&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></feed>
