﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Cameo Chen</title><link>http://www.cnblogs.com/cameo/</link><description>Ready for a new day</description><language>zh-cn</language><lastBuildDate>Fri, 09 Jan 2009 10:45:56 GMT</lastBuildDate><pubDate>Fri, 09 Jan 2009 10:45:56 GMT</pubDate><ttl>60</ttl><item><title>Excel 应用程序如何创建数据透视表</title><link>http://www.cnblogs.com/cameo/archive/2008/12/01/1344956.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Mon, 01 Dec 2008 07:07:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/12/01/1344956.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1344956.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/12/01/1344956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1344956.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1344956.html</trackback:ping><description><![CDATA[<p><font face="Verdana"><span style="font-family: 宋体">原文作者</span>:andreww</p>
<p><span style="font-family: 宋体">原文链接</span>: <a href="http://blogs.msdn.com/andreww/archive/2008/07/25/creating-a-pivottable-programmatically.aspx">http://blogs.msdn.com/andreww/archive/2008/07/25/creating-a-pivottable-programmatically.aspx</a></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我接收到一封客户的邮件,</span><span style="font-family: 宋体">问我如何创建</span>Excel<span style="font-family: 宋体">数据透视表应用程序</span>.Excel<span style="font-family: 宋体">对象模型提供了一系列的对象和方法创建数据透视表</span>(PivotTable).<span style="font-family: 宋体">可以通过很多种方法创建数据透视表</span>,<span style="font-family: 宋体">在此用一种最简单的方法创建数据透视表从外部数据库读取数据</span>.<span style="font-family: 宋体">下面我们就开始我们例子</span>.</p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我用的</span>SQL<span style="font-family: 宋体">数据库是</span>AdventureWorks,<span style="font-family: 宋体">数据库下载</span><span style="font-family: 宋体"><span style="color: #ff0000"><a href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=10901"><span style="color: #ff0000; font-family: 宋体">地址</span></a></span>.</span><span style="font-family: 宋体">在解决方案里</span>,<span style="font-family: 宋体">首先创建一个数据连接字符串获取视图</span>vSalesPersonSalesByFiscalYears<span style="font-family: 宋体">所有的销售记录</span>.<span style="font-family: 宋体">代码如下</span>:</font></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_153721" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_153721').style.display='none'; document.getElementById('Code_Open_Image_153721').style.display='inline'; document.getElementById('Code_Open_Text_153721').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_153721" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_153721').style.display='none'; getElementById('Code_Closed_Image_153721').style.display='inline'; getElementById('Code_Closed_Text_153721').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_153721">Code</span><span id="Code_Open_Text_153721" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;connection&nbsp;</span><span style="color: #000000">=</span><span style="color: #800000">@"</span><span style="color: #800000">OLEDB;Provider=SQLOLEDB.1;Integrated&nbsp;Security=SSPI;Data&nbsp;Source=MYSERVER\SQLEXPRESS;Initial&nbsp;Catalog=AdventureWorks</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;command&nbsp;</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">SELECT&nbsp;*&nbsp;FROM&nbsp;[Sales].[vSalesPersonSalesByFiscalYears]</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下一步,在Excel Workbook中,添加一个数据缓存(PivotCathe)到数据缓存集合.并且设置它的连接字符串和SQL Command属性,代码如下:</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_153202" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_153202').style.display='none'; document.getElementById('Code_Open_Image_153202').style.display='inline'; document.getElementById('Code_Open_Text_153202').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_153202" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_153202').style.display='none'; getElementById('Code_Closed_Image_153202').style.display='inline'; getElementById('Code_Closed_Text_153202').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_153202">Code</span><span id="Code_Open_Text_153202" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">Excel.PivotCache&nbsp;pivotCache&nbsp;</span><span style="color: #000000">=</span><span style="color: #0000ff">this</span><span style="color: #000000">.Application.ActiveWorkbook.PivotCaches().Add(Excel.XlPivotTableSourceType.xlExternal,&nbsp;missing);<br />
pivotCache.Connection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;connection;<br />
pivotCache.MaintainConnection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
pivotCache.CommandText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;command;<br />
pivotCache.CommandType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Excel.XlCmdType.xlCmdSql;</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下一步,添加一个PivotTable对象到worksheet对象中,PivoTable对象的创建是基于前面创建的PivotCathe对象.代码如下:</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_154517" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_154517').style.display='none'; document.getElementById('Code_Open_Image_154517').style.display='inline'; document.getElementById('Code_Open_Text_154517').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_154517" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_154517').style.display='none'; getElementById('Code_Closed_Image_154517').style.display='inline'; getElementById('Code_Closed_Text_154517').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_154517">Code</span><span id="Code_Open_Text_154517" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">Excel.Worksheet&nbsp;sheet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Excel.Worksheet)</span><span style="color: #0000ff">this</span><span style="color: #000000">.Application.ActiveSheet;<br />
Excel.PivotTables&nbsp;pivotTables&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Excel.PivotTables)sheet.PivotTables(missing);<br />
Excel.PivotTable&nbsp;pivotTable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pivotTables.Add(pivotCache,&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Application.ActiveCell,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PivotTable1</span><span style="color: #800000">"</span><span style="color: #000000">,missing,&nbsp;missing);</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下一步,设置PivotTable显示格式,数据列表的提纲模式替代默认的2*2单元格模式.代码如下:</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_155915" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_155915').style.display='none'; document.getElementById('Code_Open_Image_155915').style.display='inline'; document.getElementById('Code_Open_Text_155915').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_155915" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_155915').style.display='none'; getElementById('Code_Closed_Image_155915').style.display='inline'; getElementById('Code_Closed_Text_155915').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_155915">Code</span><span id="Code_Open_Text_155915" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">pivotTable.SmallGrid&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
pivotTable.ShowTableStyleRowStripes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
pivotTable.TableStyle2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PivotStyleLight1</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下一步,设置"SalesTerritory"字段为页查询字段,"FullName"为行查询字段,代码如下:</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_160555" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_160555').style.display='none'; document.getElementById('Code_Open_Image_160555').style.display='inline'; document.getElementById('Code_Open_Text_160555').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_160555" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_160555').style.display='none'; getElementById('Code_Closed_Image_160555').style.display='inline'; getElementById('Code_Closed_Text_160555').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_160555">Code</span><span id="Code_Open_Text_160555" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">Excel.PivotField&nbsp;pageField&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">(Excel.PivotField)pivotTable.PivotField(</span><span style="color: #800000">"</span><span style="color: #800000">SalesTerritory</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
pageField.Orientation&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Excel.XlPivotFieldOrientation.xlPageField;<br />
Excel.PivotField&nbsp;rowField&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">(Excel.PivotField)pivotTable.PivotFields(</span><span style="color: #800000">"</span><span style="color: #800000">FullName</span><span style="color: #800000">"</span><span style="color: #000000">);</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下一步,为2004年的销售数据添加一个标题,代码如下:</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_161122" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_161122').style.display='none'; document.getElementById('Code_Open_Image_161122').style.display='inline'; document.getElementById('Code_Open_Text_161122').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_161122" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_161122').style.display='none'; getElementById('Code_Closed_Image_161122').style.display='inline'; getElementById('Code_Closed_Text_161122').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_161122">Code</span><span id="Code_Open_Text_161122" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">pivotTable.AddDataField(pivotTable.PivotFields(</span><span style="color: #800000">"</span><span style="color: #800000">2004</span><span style="color: #800000">"</span><span style="color: #000000">),&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Sum&nbsp;of&nbsp;2004</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;Excel.XlConsolidationFunction.xlSum);<br />
</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最后,运行一下应用程序,显示结果如下图:</p>
<p><img height="671" alt="" src="http://www.cnblogs.com/images/cnblogs_com/cameo/VSTO/provit.jpg" width="694" border="0" /></p>
<p>备注:下载数据库跟据你本地的SQL版本下载.安装好数据库后.创建一个Offce Excel文档级项目.把上面的步骤的代码依次拷到Sheet1.cs代码中的<font face="Verdana">Sheet1_Startup</font>方法下.完成后,运行应用程序可以得到上面的运行结果.</p>
 <img src ="http://www.cnblogs.com/cameo/aggbug/1344956.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44381/" target="_blank">Google浏览器Chrome 2.0测试版发布</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>值类型与引用类型</title><link>http://www.cnblogs.com/cameo/archive/2008/10/29/1322542.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Wed, 29 Oct 2008 15:15:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/10/29/1322542.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1322542.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/10/29/1322542.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1322542.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1322542.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR是围绕类型工作的.所以在此有必要介绍一下CLR支持的两种类型值类型和引用类型.值类型的基类是System.ValueType,引用类型的基类是System.Object.&nbsp; Framework 类库提供的类型中,大部份是引用类型.而程序的开发过程中经常用的是值类型.值类型可以提高运用程序的性能.如果一个运用程序都使用引用类型.那么这个运程的性能应该是很糟糕.运用程序执行时,值类型在线程堆栈上分配,而引用类型在托管堆中分配.下面举个例子说明值类型和引用类型在运用程序执行过程中的区别.</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_100158" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_100158').style.display='none'; document.getElementById('Code_Open_Image_100158').style.display='inline'; document.getElementById('Code_Open_Text_100158').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_100158" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_100158').style.display='none'; getElementById('Code_Closed_Image_100158').style.display='inline'; getElementById('Code_Closed_Text_100158').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_100158">Code</span><span id="Code_Open_Text_100158" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;ReferenceAndValueType<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">internal</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Teacher<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Int32&nbsp;GetYearsTeached()&nbsp;{&nbsp;}<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">virtual</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;GetProcessPeport()&nbsp;{&nbsp;}<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Teacher&nbsp;Lookup(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name)&nbsp;{&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">internal</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sealed</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;President&nbsp;:&nbsp;Teacher<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;GetProcessPeport(){}<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Teacher&nbsp;t;<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int32&nbsp;year;<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;President();<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Teacher.Lookup(</span><span style="color: #800000">"</span><span style="color: #800000">Jon</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;year&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;t.GetYearsTeached();<br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.GetProcessPeport();<br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">}<br />
</span><span style="color: #008080">30</span>&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上是一个比较简单的例子，是关于教师和校长的一个应用程序，教师类型中，有获取教龄，工作内容，查找等操作。运用程序执行时。运用程序的进程首先加载CLR，<font face="Verdana">初始化托管堆(Mangaged Heap)和线程堆栈(Stread Stack).</font> JIT 编译器将应用程序集的中间语言代码（IL）转换成本地的CPU指令(Native code）,与此同时,CLR确保应用程序所有类型的程序集都被加载到应用程序域中，接着CLR查找程序集的元数据，提取信息为每个类型分配数据结构。Teacher和President类型是引用类型，数据结构在托管堆（Managed Heap）中分配，如下图:</p>
<p><img height="348" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/Managedheap.jpg" width="414" border="0" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>解释一下这两个类型,引用类型的每一个对象在托管堆上分配都有两个额外的对象：类型对象指针(Type object pointer)和同步块索引(Sync block index)，这两个成员是CLR用来管理对象。静态字段（Static fields）充许类型内定义的静态数据。虚线下面表示，每个类型对象都包含一张方法表，这张方法表是用来保存每个方法的入口点。如当某个对象调用该对象的某个方法时。就是通过这张方法表来查找对应的方法。从上图可以看出President类型对象方法表只有一个方法。而Teacher类型对象的方法表有三个方法。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR确定Main()方法所需要的Teacher和President类型对象创建和Main()方法被编译成本地的CPU指令后。应用程序的主线程，开始执行main()方法。Main()方法执行时，CLR自动初始化两个本地变量，引用类型初始化为null，值类型初始化为0（分配在线程堆栈上）,也就是执行代码的21和22行。如下图</p>
<p><img height="348" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/Threadstack.jpg" width="600" border="0" /></p>
<p>当代码执行到23行时,构建President对象,这时托管堆中,新创建了一个President对象指向President 类型对象( 注意:President对象和President类型对象是不一样的).如下图:</p>
<p><img height="348" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/StackHeap1.jpg" width="600" border="0" />&nbsp;</p>
<p>如上图新创建的President对象和其它所有的对象一样也包含类型对象指针(Type object pointer)和同步块索引(Sync block index),与类型对象有所不同的是这里包含实例化字段来存储任何基类的实例.当president对象创建时,CLR自动初始化president对象的类型对象指针(Type object pointer)指向对应的President类型对象.同时CLR也初始化了同步块索引(Sync block index).CLR将new操作(实例化President对象)返回的内存地址保存在变量t中(在线程堆栈上).</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当执行24行代码,调用Teacher对象的Lookup静态方法,CLR先在Teacher类型对象的方法表上查找Lookup的方法入口点,接着执行Lookup方法。 假设通过Lookup（）查找数据库，得到的结果是Jon是学校的校长(President).因此，间接的Lookup方法在托管堆上创建了一个新的President对象，初始化了Jon,同时将返回的内存地址保存在变量t中。注意：这时的返回的内存地址复盖掉上行代码返回的内存地址。也就是说，变量t不再指向第一个president对象，实际上，也没有其它就量去引用第一个President对象，CLR垃圾回收器会首先释放President对象的内存空间。如下图</p>
<p>&nbsp;</p>
<p><img height="348" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/StackHeap2.jpg" width="693" border="0" /></p>
<p>当执行25行代码，CLR在Teacher类型对象的方法表中查找到GetYearsTeached方法入口并执行。这里要说明一下CLR查找的顺序是从子类到基类，这里是从President类型对象方法表开始查找，没找到，再从基类Teacher类型对象方法表中查找到。假设GetYearsTeached方法返回Jon的教龄是10,并将返回的结果保存在线程堆栈上的变量year中，如下图</p>
<p><img height="348" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/StackHeap3.jpg" width="693" border="0" />&nbsp;</p>
<p>当执行26代码,调用Teacher对象的虚方法GetProcessReport,CLR查找并检查该方法实现类型,这个例子是President类型对象.即通过President类型对象的方法表查找并执行GetProcessRepor方法.下图标出了这三个方法的本地CPU代码在实现类中位置</p>
<p><img height="348" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/StackHeap4.jpg" width="693" border="0" /></p>
<p>注意:如果Teacher对象的Lookup方法查找出来Jon只是一个教师而不是校长,那么,构建的t实例是teacher对象.则执行t.GetProcessReport是调用Teacher对象的GetProcessReport方法.从以上这些图可以看出Teacher和President类型对象都包含类型对象指针,那么他们的类型对象指针会指向哪里?当CLR开始在进程中执行时,立即创建一个特殊的System.Type类型对象.President和Teacher类型对象都是System.Type类型对像的实例.所以President和Teacher类型对象指针指向System.Type 类型对象.另外再说一下System.Type类型对象是它本身的一个实例.所以System.Type类型对象指针指向它本身.如下图:<br />
<img alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/CLR/StackHeap5.jpg" width="733" border="0" /></p>
<img src ="http://www.cnblogs.com/cameo/aggbug/1322542.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44380/" target="_blank">微软中国被指变相裁员 微软称确有过人事调整</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Visual studio tools for office体系结构</title><link>http://www.cnblogs.com/cameo/archive/2008/10/21/1278781.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Tue, 21 Oct 2008 10:12:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/10/21/1278781.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1278781.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/10/21/1278781.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1278781.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1278781.html</trackback:ping><description><![CDATA[<p>使用 Visual Studio Tools for Office 可以创建两种类型的解决方案：文档级自定义项和应用程序级外接程序。它们具有以下配置：</p>
<ul>
    <li>
    <p>文档级自定义项由附加于 Microsoft Office Word 文档或 Microsoft Office Excel 工作簿的托管代码程序集组成。</p>
    </li>
    <li>
    <p>应用程序级外接程序由作为 Microsoft Office 应用程序中的外接程序运行的托管代码程序集组成。</p>
    </li>
</ul>
<p>&nbsp;使用Visual Studio Tools for Office 开发的应用程序是基于CLR的托管应用程序,而Office 是基于COM 组件的非托管应用程序.所以在此觉得有必要复习一下托管应用程序在CLR中的执行过程.就举一个最简单的例子吧,代码如下:</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_165921" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_165921').style.display='none'; document.getElementById('Code_Open_Image_165921').style.display='inline'; document.getElementById('Code_Open_Text_165921').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_165921" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_165921').style.display='none'; getElementById('Code_Closed_Image_165921').style.display='inline'; getElementById('Code_Closed_Text_165921').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_165921">Code</span><span id="Code_Open_Text_165921" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Hello&nbsp;Word</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>下图为执行的流程图</p>
<p><img height="978" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/VSTO/Capplication.jpg" width="747" border="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单说说执行过程,VS.NET IDE 调用CSC.exe编译器生成EXE程序集.以32位操作系统为例.当执行EXE程序集时,首行创建一个32位的进程,这个进程中的主线程会去调用MSCorEE.dll组件来初始化CLR,MSCorEE.dll位于<font face="Verdana">C:\WINDOWS\system32</font>目录下,用来判断一台机器是否安装.NET Framework.初如化的CLR会去加载EXE程序集,并从函数入口点Main()开始执行程序,CLR为Main方法中调用的Console类型分配一个单独的内部结构,并为每个该类型的每个方法付上地址,以便该方法调用的时候使用,当首次调用WriteLine()方法时,会去调用JIT编译器,JIT编译器从元数据中查找WriteLine方法,把它编译成本地的CPU代码.并修改存储在Console类型中WriteLine的指针,这样子第二次开始调用WriteLine方法可直接执行本地的CPU代码.另外对元数据有点补充,元数据有二张表,一张是类型表,如用来核对编译时的参数类型.另一个是成员表.说明该托管模块有哪些成员.托管应用程序的执行过程就介绍到这边,下面介绍一下Office应用程序的执行过程.</p>
<p><img height="648" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/VSTO/VSTOapplication.jpg" width="514" border="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VSTO创建的两种解决方案,不管是文档级自定义项,还是应用程序级外接程序,<font face="Verdana">部署后都是由office文档和程序集(dll文件)两个部份组成.当打开具体托管代码office文档时,VSTO加载程序将启动VSTO 运行库(Runtime),创建应用程序域并将该应用程序域的策略设置为不信任&#8220;我的电脑&#8221;区域.接着VSTO 运行库初始化公共语言运行库(CLR)到应用程序域中.被初始化的CLR加载与文档对应的托管程序集.托管程序通过主互操作程序集PIA(<span style="color: #003366">适配器</span>)来捕获文档中发生的事件.接下去具体谈谈Office文档调用程序集的过程.</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;1.文档级自定义项的体系结构</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1).2007 Microsoft Office system 的自定义项体系结构</p>
<p>&nbsp;</p>
<p><img height="480" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/VSTO/2007doc1.jpg" width="363" border="0" />&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;不管是文档级自定义项,还是应用程序级外接程序,都存在着指针,用来保存关链的托管程序集的地址.在Office2007文档提供了_AssemblyLocation 属性,用来存储部署清单.当用户打开属于 2007 Microsoft Office 自定义项的文档时,应用程序从&nbsp;_AssemblyLocation读取部署清单.接着从部署清单中读取应用程序清单.来查找最新的文档级自定义项程序集.自定项程序集过主互操作程序集PIA与Office COM组件进行通信.</p>
<p>&nbsp;</p>
<p><strong></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2).Microsoft Office 2003 的自定义项体系结构</p>
<p>&nbsp;</p>
<p><img height="480" alt="" src="http://www.cnblogs.com/images/cnblogs_com/cameo/VSTO/2003doc1.jpg" width="363" border="0" />&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Office2003文档级自义定项中,不同的是用<span style="color: #000080">运行时存储控件</span>来保存应用程序清单.当用户打开属于 2003 Microsoft Office 自定义项的文档时,应用程序从运行时存储控件中读取应用程序清单.应用程序清单加载可选的部署清单来查找最新的文档级自义定项程序集.自定项程序集过主互操作程序集PIA与Office COM组件进行通信.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在此有必要说说VSTO Runtime 3.0和VSTO Runtime 2.0加载组件是不同的.在VSTO Runtime 3.0，应用程序首先加载VSTOEE.dll组件，接着加载VSTOLoader.dll组件来初始化公共语言运行库．而在VSTO Runtime 2.0只提供AddinLoader.dll来初始化公共语言运行库.</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>2.应用程序级外接程序的体系结构</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1).2007 Microsoft Office system 的外接程序体系结构</p>
<p>&nbsp;</p>
<p><img height="480" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/VSTO/2007addin1.jpg" width="339" border="0" />&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与文档级自定义项程序相比，应用程序外接程序是通过注册来发现应用程序的．当用户打开属于 2007 Microsoft Office 应用程序外接程序文档时．应用程序读取注册表项，接着读取部署清单．从部署清单中读取应用程序清单来查找最新的外接程序程序集．外接程序程序集通过主互操作程序集(PIA)与Office COM组件通信．</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2).Microsoft Office 2003 的外接程序体系结构</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img height="480" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/VSTO/2003addin1.jpg" width="339" border="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与Microsoft Office 2007 的外接程序相比．加载外接程序程序集的过程基本上是一样的．有一点不同的是应用程序清单加载可选择的部署清单来查找最新的外接程序程序集，外接程序程序集通过主互操作程序集(PIA)与Office COM组件通信．</p>
 <img src ="http://www.cnblogs.com/cameo/aggbug/1278781.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44379/" target="_blank">“新一代互联网”研究：中国走在世界前列</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>C#类型转换</title><link>http://www.cnblogs.com/cameo/archive/2008/10/07/1305323.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Tue, 07 Oct 2008 02:38:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/10/07/1305323.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1305323.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/10/07/1305323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1305323.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1305323.html</trackback:ping><description><![CDATA[<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;TypeCast<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_106_1134_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_106_1134_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_106_1134_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_106_1134_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_106_1134_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_106_1134_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_106_1134_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_106_1134_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_106_1134_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_106_1134_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">internal</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Employee<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_140_153_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_140_153_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_140_153_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_140_153_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_140_153_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_140_153_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_140_153_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_140_153_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_140_153_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_140_153_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">internal</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Manager&nbsp;:&nbsp;Employee<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_196_209_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_196_209_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_196_209_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_196_209_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_196_209_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_196_209_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_196_209_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_196_209_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_196_209_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_196_209_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_232_1133_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_232_1133_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_232_1133_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_232_1133_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_232_1133_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_232_1133_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_232_1133_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_232_1133_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_232_1133_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_232_1133_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_282_960_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_282_960_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_282_960_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_282_960_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_282_960_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_282_960_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_282_960_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_282_960_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_282_960_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_282_960_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Manager();<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;Employee;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img id="Codehighlighter1_402_476_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_402_476_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_402_476_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_402_476_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_402_476_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_402_476_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_402_476_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_402_476_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_402_476_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_402_476_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(e.GetType().ToString());<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PromoteEmployee(m);<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">the&nbsp;cast&nbsp;above&nbsp;no&nbsp;fails:Cause&nbsp;Manager&nbsp;is&nbsp;derived&nbsp;from&nbsp;Employee</span><span style="color: #008000"><br />
</span><span style="color: #008080">29</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">();<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;e1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;o&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;Employee;<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e1&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img id="Codehighlighter1_707_781_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_707_781_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_707_781_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_707_781_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_707_781_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_707_781_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_707_781_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_707_781_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_707_781_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_707_781_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(e.GetType().ToString());<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">the&nbsp;cast&nbsp;above&nbsp;fails:no&nbsp;exception&nbsp;is&nbsp;thrown,but&nbsp;e1&nbsp;is&nbsp;set&nbsp;to&nbsp;null</span><span style="color: #008000"><br />
</span><span style="color: #008080">38</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PromoteEmployee(o);<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">the&nbsp;cast&nbsp;above&nbsp;fails:&nbsp;exception&nbsp;is&nbsp;thrown</span><span style="color: #008000"><br />
</span><span style="color: #008080">41</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;PromoteEmployee(Object&nbsp;o)<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img id="Codehighlighter1_1023_1127_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1023_1127_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1023_1127_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1023_1127_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1023_1127_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1023_1127_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1023_1127_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1023_1127_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1023_1127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1023_1127_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Employee)o;<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(e.GetType().ToString());<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><br />
<span style="color: #008080">49</span><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></div>
<p>注意:用As 类型转换操作不会抛出异常.</p>
<img src ="http://www.cnblogs.com/cameo/aggbug/1305323.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44378/" target="_blank">苏宁首战告捷 销售同比增六成</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>VSTO开发团队成立</title><link>http://www.cnblogs.com/cameo/archive/2008/09/12/1289870.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Fri, 12 Sep 2008 05:49:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/09/12/1289870.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1289870.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/09/12/1289870.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1289870.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1289870.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Verdana">Visual Studio Tools for Office，简称VSTO ,是开发基于Office解决方案的一组工具</font>.通过将 Microsoft Office 2003 或 2007 Microsoft Office system 用作解决方案的前端，您可以利用熟悉的 Microsoft Office 用户界面和内置工具，例如拼写检查、修订和电子邮件支持。Microsoft Office 解决方案的另一个好处是脱机使用解决方案的客户端部分，与使用基于 Web 的体系结构相比，这样更有可能实现复杂的解决方案。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visual Studio Tools for Office 包含用于文档级自定义项和应用程序级外接程序的项目模板。要决定最适合您的解决方案的项目类型，请考虑您希望代码是仅当特定文档打开时运行，还是只要 Microsoft Office 应用程序运行就可用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档级自定义项包括一个程序集，该程序集与 Microsoft Office Word 2003 或 Microsoft Office Excel 2003 中的一个文档、工作簿或模板关联。该程序集在关联的文档打开时加载。您创建的自定义项中的功能仅在关联的文档打开时可用。自定义项不能进行应用程序范围的更改，例如当任何文档打开时都显示一个新菜单项。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用程序级外接程序包含一个与某个 Microsoft Office 应用程序关联的程序集。通常，该外接程序在关联的应用程序启动时运行，当然，用户也可以在关联应用程序已在运行时加载外接程序。您创建的外接程序中的功能可用于应用程序本身，而与所打开的文档无关。</p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><span style="color: #0000ff">请有兴趣的朋友在这里留下您的帐号，我们一起来学习和研究VSTO</span></p>
<img src ="http://www.cnblogs.com/cameo/aggbug/1289870.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44377/" target="_blank">福布斯：虚拟化技术登陆Mac平台</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>15. Command 命令（行为型模式）</title><link>http://www.cnblogs.com/cameo/archive/2008/08/01/1258435.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Fri, 01 Aug 2008 11:35:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/08/01/1258435.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1258435.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/08/01/1258435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1258435.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1258435.html</trackback:ping><description><![CDATA[摘要: 耦合与变化耦合是软件不能抵御变化灾难的根本性原因。不仅实体对象与实体对象之间存在耦合关系，实体对象与行为操作之间也存在耦合关系。 动机（Motivation）在软件构建过程中，&#8220;行为请求者&#8221;与&#8220;行为实现者&#8221;通常呈现一种&#8220;紧耦合&#8221;。但在某些场合——比如需要对行为进行&#8220;记录、撤销/重做（undo/redo）、事务&#8&nbsp;&nbsp;<a href='http://www.cnblogs.com/cameo/archive/2008/08/01/1258435.html'>阅读全文</a><img src ="http://www.cnblogs.com/cameo/aggbug/1258435.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44376/" target="_blank">微软CEO信誓旦旦:Windows 7将成最出色操作系统</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>14. Template Method模板方法（行为型模式)</title><link>http://www.cnblogs.com/cameo/archive/2008/07/28/1255038.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Mon, 28 Jul 2008 11:17:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/07/28/1255038.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1255038.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/07/28/1255038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1255038.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1255038.html</trackback:ping><description><![CDATA[<p><font face="Verdana">无处不在的Template Method<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你只想掌握一种设计模式，那么它就是Template Method！</font> </p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;变化——<span style="color: red">是软件设计的永恒主题</span>，如何管理变化带来的复杂性？<span style="color: red">设计模式的艺术性和复杂度就在于如何分析，并发现系统中的变化点和稳定点</span><span style="color: red">，并使用特定的设计方法来应对这种变化。</span></font></p>
<p><font face="Verdana"><span style="color: red"><font style="color: #000000" face="Verdana">动机（Motivation）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在软件构建过程中，<span style="color: red">对于某一项任务，它常常有稳定的整体操作结构</span>，但各个子步骤却有<span style="color: red">很多改变的需求</span>，或者由于固有的原因（比如<span style="color: red">框架与应用之间的关系</span>）而无法和任务的整体结构同时实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如何在确定稳定操作结构的前提下，来灵活应对各个子步骤的变化或者晚期实现需求？</font></span></font></p>
<p><font face="Verdana" color="#000000"></font><font face="Verdana">意图（Intent）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">定义一个操作中的算法的骨架，而将一些步骤延迟到子类中</span>。Template Method使得子类<span style="color: red">可以不改变一个算法的结构即可重定义该算法的某些特定步骤</span>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;——《设计模式》GoF</font></p>
<p><font face="Verdana">结构（Structure）</font></p>
<p><img height="338" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/Design%20pattern/template.jpg" width="601" border="0" /></p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Template_method<br />
<img id="Codehighlighter1_113_1542_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_113_1542_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_113_1542_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_113_1542_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_113_1542_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_113_1542_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_113_1542_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_113_1542_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_113_1542_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_113_1542_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">框架开发者-先开发</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Vehical&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">表示汽车</span><span style="color: #008000"><br />
<img id="Codehighlighter1_177_738_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_177_738_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_177_738_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_177_738_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_177_738_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_177_738_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_177_738_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_177_738_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_177_738_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_177_738_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;startup();</span><span style="color: #008000">//</span><span style="color: #008000">业界的共识&nbsp;虚方法前加protected</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;turn(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;degree);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;stop();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Test()&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">非虚方法前加public</span><span style="color: #008000"><br />
<img id="Codehighlighter1_424_727_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_424_727_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_424_727_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_424_727_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_424_727_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_424_727_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_424_727_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_424_727_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_424_727_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_424_727_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" />&nbsp;测试数据记录</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startup();</span><span style="color: #008000">//</span><span style="color: #008000">晚绑定-留给应用程序开发人员;扩展点<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" />&nbsp;测试数据记录</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run();</span><span style="color: #008000">//</span><span style="color: #008000">晚绑定-留给应用程序开发人员;扩展点<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" />&nbsp;测试数据记录</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn(</span><span style="color: #800080">40</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">晚绑定-留给应用程序开发人员;扩展点<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" />&nbsp;测试数据记录</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop();</span><span style="color: #008000">//</span><span style="color: #008000">晚绑定-留给应用程序开发人员;扩展点<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" />生成测试报表</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">应用程序开发-晚开发</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HongqiCar&nbsp;:&nbsp;Vehical<br />
<img id="Codehighlighter1_800_1217_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_800_1217_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_800_1217_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_800_1217_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_800_1217_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_800_1217_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_800_1217_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_800_1217_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_800_1217_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_800_1217_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;startup()<br />
<img id="Codehighlighter1_852_905_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_852_905_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_852_905_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_852_905_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_852_905_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_852_905_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_852_905_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_852_905_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_852_905_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_852_905_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">startup</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()<br />
<img id="Codehighlighter1_953_1002_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_953_1002_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_953_1002_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_953_1002_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_953_1002_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_953_1002_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_953_1002_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_953_1002_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_953_1002_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_953_1002_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">run</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;turn(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;degree)<br />
<img id="Codehighlighter1_1060_1112_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1060_1112_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1060_1112_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1060_1112_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1060_1112_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1060_1112_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1060_1112_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1060_1112_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1060_1112_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1060_1112_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">degree</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;stop()<br />
<img id="Codehighlighter1_1160_1210_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1160_1210_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1160_1210_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1160_1210_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1160_1210_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1160_1210_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1160_1210_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1160_1210_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1160_1210_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1160_1210_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">stop</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;VehicalTestFramework<br />
<img id="Codehighlighter1_1254_1360_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1254_1360_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1254_1360_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1254_1360_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1254_1360_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1254_1360_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1254_1360_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1254_1360_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1254_1360_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1254_1360_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;DoTest(Vehical&nbsp;vehical)<br />
<img id="Codehighlighter1_1315_1354_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1315_1354_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1315_1354_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1315_1354_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1315_1354_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1315_1354_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1315_1354_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1315_1354_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1315_1354_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1315_1354_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vehical.Test();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
<img id="Codehighlighter1_1383_1540_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1383_1540_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1383_1540_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1383_1540_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1383_1540_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1383_1540_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1383_1540_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1383_1540_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1383_1540_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1383_1540_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
<img id="Codehighlighter1_1433_1534_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1433_1534_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1433_1534_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1433_1534_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1433_1534_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1433_1534_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1433_1534_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1433_1534_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1433_1534_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1433_1534_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VehicalTestFramework.DoTest(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HongqiCar());<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>&nbsp;</p>
<p><font face="Verdana">Template Method模式的几个要点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8226; Template Method模式是<span style="color: red">一种非常基础性的设计模式</span>，在面向对象系统中有着大量的应用。它用最简洁的机制（虚函数的多态性）为<span style="color: red">很多应用程序框架提供了</span>灵活的扩展点，<span style="color: red">是代码复用方面的基本实现结构</span>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8226; 除了可以灵活应对子步骤的变化外，&#8220;<span style="color: red">不要调用我，让我来调用你</span>&#8221;的<span style="color: red">反向控制结构</span>是Template Method的典型应用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8226; 在具体实现方面，被Template Method调用的虚方法可以具有实现，也可以没有任何实现（抽象方法、纯虚方法），但一般推荐将它们设置为protected方法。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">模版方法模式实际上是所有模式中最为常见的几个模式之一</span>，而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这个模式。模版方法模式是基于<span style="color: red">继承的代码复用的基本技术</span>，模版方法模式的<span style="color: red">结构和用法也是面向对象设计的核心</span>。</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/cameo/aggbug/1255038.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44375/" target="_blank">趣闻:李开复其实是跳舞机高手</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>13. Proxy代理（结构型模式）</title><link>http://www.cnblogs.com/cameo/archive/2008/07/25/1251148.html</link><dc:creator>Cameo</dc:creator><author>Cameo</author><pubDate>Fri, 25 Jul 2008 03:29:00 GMT</pubDate><guid>http://www.cnblogs.com/cameo/archive/2008/07/25/1251148.html</guid><wfw:comment>http://www.cnblogs.com/cameo/comments/1251148.html</wfw:comment><comments>http://www.cnblogs.com/cameo/archive/2008/07/25/1251148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cameo/comments/commentRss/1251148.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cameo/services/trackbacks/1251148.html</trackback:ping><description><![CDATA[<p><font face="Verdana"><font face="Verdana">直接与间接</font></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Verdana">人们对于复杂的软件系统常常有<span style="color: red">一种处理手法</span>，即增加<span style="color: red">一层间接层</span>，从而对系统获得一种<span style="color: red">更为灵活、满足特定需求的解决方案</span>。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><font face="Verdana"><img height="401" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/Design%20pattern/proxy.jpg" width="488" border="0" /></font></p>
<p><font face="Verdana">动机（Motivation）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在面向对象系统中，有些对象由于某种原因（比如对象创建的开销很大，或者某些操作需要安全控制，或者需要进程外的访问等），直接访问会给使用者、或者系统结构带来很多麻烦。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性？<span style="color: red">增加一层间接层是软件开发中常见的解决方式</span>。</font></p>
<p><font face="Verdana">意图（Intent）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为其他对象提供一种<span style="color: red">代理以控制对这个对象的访问</span>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;——《设计模式》GoF</font>&nbsp;</p>
<p><font face="Verdana"><font face="Verdana"><img style="width: 746px; height: 306px" height="306" alt="" src="http://images.cnblogs.com/cnblogs_com/cameo/Design%20pattern/proxy1.jpg" width="746" border="0" /></font></font></p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Proxy<br />
<img id="Codehighlighter1_103_1278_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_103_1278_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_103_1278_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_103_1278_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_103_1278_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_103_1278_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_103_1278_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_103_1278_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_103_1278_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_103_1278_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_110_258_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_110_258_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_110_258_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_110_258_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"><img id="Codehighlighter1_110_258_Open_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_110_258_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_110_258_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_110_258_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_110_258_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Subject</span><span id="Codehighlighter1_110_258_Open_Text" style="display: none"><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;Subject</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IEmployee<br />
<img id="Codehighlighter1_154_243_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_154_243_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_154_243_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_154_243_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_154_243_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_154_243_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_154_243_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_154_243_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_154_243_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_154_243_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;GetSalary();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Report();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ApplyVacation();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_264_452_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_264_452_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_264_452_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_264_452_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"><img id="Codehighlighter1_264_452_Open_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_264_452_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_264_452_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_264_452_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_264_452_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">RealSubject</span><span id="Codehighlighter1_264_452_Open_Text" style="display: none"><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;RealSubject</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Employee&nbsp;:&nbsp;IEmployee<br />
<img id="Codehighlighter1_320_436_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_320_436_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_320_436_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_320_436_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_320_436_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_320_436_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_320_436_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_320_436_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_320_436_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_320_436_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_354_357_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_354_357_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_354_357_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_354_357_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_354_357_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_354_357_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_354_357_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_354_357_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;GetSalary()&nbsp;</span><span id="Codehighlighter1_354_357_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_354_357_Open_Text"><span style="color: #000000">{&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_387_390_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_387_390_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_387_390_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_387_390_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_387_390_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_387_390_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_387_390_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_387_390_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Report()&nbsp;</span><span id="Codehighlighter1_387_390_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_387_390_Open_Text"><span style="color: #000000">{&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_427_430_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_427_430_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_427_430_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_427_430_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_427_430_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_427_430_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_427_430_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_427_430_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&n