﻿<?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>博客园-gjcn</title><link>http://www.cnblogs.com/gjcn/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 29 Aug 2008 00:06:48 GMT</lastBuildDate><pubDate>Fri, 29 Aug 2008 00:06:48 GMT</pubDate><ttl>60</ttl><item><title>CLR系列：大型对象堆</title><link>http://www.cnblogs.com/gjcn/archive/2008/07/23/1248587.html</link><dc:creator>gjcn</dc:creator><author>gjcn</author><pubDate>Wed, 23 Jul 2008 01:46:00 GMT</pubDate><guid>http://www.cnblogs.com/gjcn/archive/2008/07/23/1248587.html</guid><wfw:comment>http://www.cnblogs.com/gjcn/comments/1248587.html</wfw:comment><comments>http://www.cnblogs.com/gjcn/archive/2008/07/23/1248587.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/gjcn/comments/commentRss/1248587.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/gjcn/services/trackbacks/1248587.html</trackback:ping><description><![CDATA[<p>园子里有很多人已经对CLR的GC Heap有过激烈的讨论，里面有不少精华文章。但是既然是CLR系列，那么就不得不对GC Heap进行讲解。本文主要是对LOH<span style="font-family: 宋体">（</span>Large Object Heap<span style="font-family: 宋体">）讲解。</span><span style="font-family: 宋体"><span style="font-family: 宋体">在一个托管进程被创建以后，在托管进程的内存空间里面，包含了</span>System Domain<span style="font-family: 宋体">，</span>Shared Domain<span style="font-family: 宋体">，</span>Default Domain<span style="font-family: 宋体">，</span>Process<span style="font-family: 宋体">的</span>Heap<span style="font-family: 宋体">，</span>JIT Code heap（都包含在<font face="Verdana">LoaderHeap）</font><span style="font-family: 宋体">，</span>GC Heap<span style="font-family: 宋体">以及</span>LOH<span style="font-family: 宋体">。</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体">CLR 垃圾回收器 (GC) 将对象分为大型、小型两类。如果是大型对象，与其相关的一些属性将比对象较小时显得更为重要。例如，压缩大型对象（将内存复制到堆上的其他位置）的费用相当高。我将讨论符合什么条件的对象才能称之为大型对象，如何回收这些大型对象，以及大型对象具备哪些性能意义。</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体"><strong>大型对象堆</strong></span></span></p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体">.NET Framework 1.1 和 2.0 中，如果对象大于或等于 85,000 字节，将被视为大型对象。注意：<strong>此数字根据性能优化的结果确定</strong>。当对象分配请求传入后，如果符合该大小，便会将此对象分配给大型对象堆。为什么会这样呢？我们先看看NET 垃圾回收器的基础知识。</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体">我们知道，.NET 垃圾回收器是分代回收器。它包含三代：第0代、第1代和第2代。之所以分代，是因为在良好调优的应用程序中，您可以在第0代清除大部分对象。每当触发一次垃圾回收，NET就首先扫描第0代，仍存在的对象将被放到第1代，当第1代放满后，会对第1代进行垃圾回收，仍存在的对象将被放到第2代，以此进行下去。但是，最后一代回收未处理的对象仍会被视为最后一代中的对象。从本质上讲，第1代是新对象区域与生存期较长的对象区域之间的缓冲区。回收任何一代，都会回收他以前的所有代。例如，执行第1代垃圾回收时，将同时回收第1代和第0代。执行第2代垃圾回收时，将回收整个堆。</span></span></p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体">加载 CLR 时，将分配两个初始堆栈段（一个用于小型对象，另一个用于大型对象），我将它们分别称为小型对象堆 (SOH) 和大型对象堆 (LOH)。然后，通过将托管对象置于任一托管堆栈段上来满足分配请求。如果对象小于 85,000 字节，则将其放在 SOH 段上；否则将其放在 LOH 段上。随着分配到各段上的对象越来越多，会以较小块的形式提交这些段。用户代码只能在第 0 代（小型对象）或 LOH（大型对象）中分配。只有垃圾回收器可以在第1代（通过提升第0代回收未处理的对象）和第2代（通过提升第1代和第2代回收未处理的对象）中&#8220;分配&#8221;对象。触发垃圾回收后，垃圾回收器将寻找存在的对象并将它们压缩。如果没有足够的可用空间来容纳大型对象分配请求，我会先尝试从操作系统获取更多段。如果失败，我将触发第 2 代垃圾回收以便释放一些空间。</span></span></p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体">如果大家还有所怀疑，可以看看下面windbg+sos<span style="font-family: 宋体">来看看一个用户态运行的程序的</span>GC Heap<span style="font-family: 宋体">里面都是些什么：</span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体"><span style="font-family: 宋体"><font face="Verdana">Number of GC Heaps: 1<br />
<strong>generation 0 starts at 0x013d1018<br />
generation 1 starts at 0x013d100c<br />
generation 2 starts at 0x013d1000<br />
</strong>ephemeral segment allocation context: none<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
<strong>001b09f8 7a733370&nbsp; 7a754b98 0x00021828(137256)<br />
001b3fc0 7b463c40&nbsp; 7b47a744 0x00016b04(92932)<br />
0014df68 790d8620&nbsp; 790f7d8c 0x0001f76c(128876)<br />
013d0000 013d1000&nbsp; 01425ff4 0x00054ff4(348148)<br />
</strong>Large object heap starts at 0x023d1000<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
<strong>023d0000 023d1000&nbsp; 023d8e00 0x00007e00(32256)<br />
</strong>Total Size&nbsp;&nbsp; 0xb488c(739468)<br />
------------------------------<br />
GC Heap Size&nbsp;&nbsp; 0xb488c(739468)<br />
我们一个<span lang="EN-US">GC Heap</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面有四个</span><span lang="EN-US">Heap Segment</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，紧接着</span><span lang="EN-US">Heap Segment</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的，是</span><span lang="EN-US">LOH</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这些Generation<span style="font-family: 宋体">是保存在一个一个的</span><span lang="EN-US"><span lang="EN-US">Heap Segment</span></span><span style="font-family: 宋体">里面的。一个</span>Heap Segment<span style="font-family: 宋体">可以包含两个</span>Generation<span style="font-family: 宋体">或者三个，或者更多。而一个</span>Generation<span style="font-family: 宋体">可以跨越多个</span>Heap Segment<span style="font-family: 宋体">。<span style="font-family: 宋体">紧接着</span>GC Heap<span style="font-family: 宋体">的内存区域，就是</span>LOH<span style="font-family: 宋体">。在默认情况下，超过</span>85000byte<span style="font-family: 宋体">的对象就被保存到这里。</span></span></span></font></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-family: 宋体"><span style="font-family: 宋体"><font face="Verdana"></font></span></span></span><span style="font-family: 宋体"><span style="font-family: 宋体"><span style="font-family: 宋体"><font face="Verdana"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span style="font-family: 宋体"><span style="font-family: 宋体">&nbsp;</p>
<div class="ArticleTypeTitle" id="id0070017"><strong>何时回收大型对象</strong></div>
<div class="ArticleTypeTitle"><span class="ArticleInlineTitle">分配超出第 0 代或大型对象阈值</span></div>
<div class="ArticleTypeTitle"><span class="ArticleInlineTitle">调用 System.GC.Collect</span> 如果对第 2 代调用 GC.Collect,将立即回收 LOH 及其他托管堆。</div>
<div class="ArticleTypeTitle"><span class="ArticleInlineTitle">系统内存太低</span></div>
<div class="ArticleTypeTitle">&nbsp;</div>
<div class="ArticleTypeTitle"><strong>LOH 性能</strong></div>
<div class="ArticleTypeTitle">CLR选择扫过所有对象，扫描一遍来判断这个对象有没有对别的对象的引用。如果有的话，这一类对象就会存储在一起，而没有对其它对象引用的对象就会存在其余的另外一个区域。这样做是基于性能考虑的。</div>
<div class="ArticleTypeTitle">们来看一下回收成本。前面曾提到，LOH 和第2代将一起回收。如果超过两者中任何一个的阈值，都会触发第2代回收。如果由于第2代为 LOH 而触发了第2代回收，则第 2 代本身在垃圾回收后不一定会变得更小。因此，如果第2代中的数据不多，这将不是问题。但是，如果第2代很大，则触发多次第2代垃圾回收可能会产生性能问题。毫无疑问，如果仍继续分配和处理真正的大型对象，分配成本肯定会大幅增加。</div>
<div class="ArticleTypeTitle">我们可以看看上面的调试结果，我们可以看到</div>
<div class="ArticleTypeTitle">Large object heap starts at 0x023d1000<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
<strong>023d0000 023d1000&nbsp; 023d8e00 0x00007e00(32256)</strong></div>
<div>您会看到 LOH 的总大小少于 85,000 个字节。为什么会这样？这是因为运行时本身实际使用LOH分配某些小于大型对象的对象。在看看下面的调试代码（LOH的内存段）</div>
<div><font face="Verdana">0:011&gt; !dumpheap -stat 023d1000&nbsp; 023d8e00 <br />
total 17 objects<br />
Statistics:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MT&nbsp;&nbsp;&nbsp; Count&nbsp;&nbsp;&nbsp; TotalSize Class Name<br />
0014c090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Free<br />
7912d8f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32112 System.Object[]<br />
Total 17 objects</font><br />
大型对象费用很高。由于 CLR 需要清除一些新分配大型对象的内存，以满足 CLR 清除所有新分配对象内存的保证，所以分配成本相当高。LOH 将与堆的其余部分一起回收，如果可以，建议重新使用大型对象以避免托管堆。LOH 上的特大对象通常是数组（很少会有非常大的实例对象）。如果数组元素包含很多引用，则成本将会很高。如果元素不包含任何引用，则根本无需处理此数组。最后，到目前为止，在回收过程中尚不能压缩 LOH，但不应依赖于此实现。因此，要确保某些内容未被GC移动，请始终将其固定起来。</div>
</span></span></span></font></span></span></span>
<img src ="http://www.cnblogs.com/gjcn/aggbug/1248587.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41943/" target="_blank">[新闻]轮回－新浪推出Facebook模式的SNS</a>]]></description></item><item><title>CLR系列：窥视HashTable</title><link>http://www.cnblogs.com/gjcn/archive/2008/07/07/1234560.html</link><dc:creator>gjcn</dc:creator><author>gjcn</author><pubDate>Mon, 07 Jul 2008 01:59:00 GMT</pubDate><guid>http://www.cnblogs.com/gjcn/archive/2008/07/07/1234560.html</guid><wfw:comment>http://www.cnblogs.com/gjcn/comments/1234560.html</wfw:comment><comments>http://www.cnblogs.com/gjcn/archive/2008/07/07/1234560.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cnblogs.com/gjcn/comments/commentRss/1234560.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/gjcn/services/trackbacks/1234560.html</trackback:ping><description><![CDATA[<strong>哈希表(Hashtable)简述</strong><br />
我想大家对<strong>Hashtable</strong>很熟悉，平时在工作中使用的也是比较多的，现在都是3.5了，<strong>Dictionary</strong> 的出现已经可以替代Hashtable，但是我还是想对这个Net框架使用较多的对象(举个例子：Net的CLR处理一个程序集的字符串就是采用HashTable存储在System Domain)讲解一下，因为很多新的技术都是建立在老的技术和思想上的。<br />
在.NET Framework中，Hashtable是System.Collections命名空间提供的一个容器，用于处理和表现类似key/value的键值对，其中key通常可用来快速查找，同时key是区分大小写；value用于存储对应于key的值。Hashtable中key/value键值对均为 object类型，所以Hashtable可以支持任何类型的key/value键值对.<br />
<br />
<strong>例子</strong><br />
<div class="cnblogs_code"><img id="Code_Closed_Image_103613" onclick="this.style.display='none'; Code_Closed_Text_103613.style.display='none'; Code_Open_Image_103613.style.display='inline'; Code_Open_Text_103613.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_103613" style="display: none" onclick="this.style.display='none'; Code_Open_Text_103613.style.display='none'; Code_Closed_Image_103613.style.display='inline'; Code_Closed_Text_103613.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_103613" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code</span><span id="Code_Open_Text_103613" style="display: none"><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Hashtable&nbsp;ht&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Hashtable();<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">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;&nbsp;m&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">;&nbsp;m</span><span style="color: #000000">++</span><span style="color: #000000">)<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" />&nbsp;&nbsp;&nbsp;ht.Add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;cuskey(m),&nbsp;m);<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">if</span><span style="color: #000000">&nbsp;(ht.ContainsKey(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;cuskey(</span><span style="color: #800080">3</span><span style="color: #000000">)))<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_127_169_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_127_169_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_127_169_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_127_169_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_127_169_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_127_169_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_127_169_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_127_169_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_127_169_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_127_169_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</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;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">find!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;}</span></span><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/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_181_230_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_181_230_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_181_230_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_181_230_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_181_230_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_181_230_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_181_230_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_181_230_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_181_230_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_181_230_Open_Text"><span style="color: #000000">{<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;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">can't&nbsp;find!</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">11</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 style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ht.Clear();<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />MyTest&nbsp;key1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyTest(</span><span style="color: #800080">10</span><span style="color: #000000">);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ht.Add(key1,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Key1</span><span style="color: #800000">"</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/None.gif" align="top" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ht.ContainsKey(key1))<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_324_402_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_324_402_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_324_402_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_324_402_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_324_402_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_324_402_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_324_402_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_324_402_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;</span><span id="Codehighlighter1_324_402_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_324_402_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;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Is&nbsp;key1&nbsp;contained&nbsp;in&nbsp;hashtable?&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;}</span></span><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/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_414_494_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_414_494_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_414_494_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_414_494_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_414_494_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_414_494_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_414_494_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_414_494_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_414_494_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_414_494_Open_Text"><span style="color: #000000">{<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;Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Is&nbsp;key1&nbsp;contained&nbsp;in&nbsp;hashtable?&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
</span><span style="color: #008080">23</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 style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />key1.KeyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">11</span><span style="color: #000000">;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;isContained&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ht.ContainsKey(key1);<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Is&nbsp;key1&nbsp;contained&nbsp;in&nbsp;hashtable?&nbsp;{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;isContained);<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />MyTest&nbsp;key2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyTest(</span><span style="color: #800080">10</span><span style="color: #000000">);<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ht.Add(key2,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">key2</span><span style="color: #800000">"</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/None.gif" align="top" />Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Hashtable&nbsp;counts:</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ht.Count);<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />MyTest&nbsp;key3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyTest(</span><span style="color: #800080">15</span><span style="color: #000000">);<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ht.Add(key3,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">key3</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">Hashtable&nbsp;counts:</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ht.Count);<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">MyTest&nbsp;key4&nbsp;=&nbsp;new&nbsp;MyTest(10);<br />
</span><span style="color: #008080">37</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">ht.Add(key4,&nbsp;"key4");&nbsp;</span></span></div>
<p>先不做解释，看看结果。<br />
<img height="92" alt="" src="http://www.cnblogs.com/images/cnblogs_com/gjcn/hashtable1.JPG" width="315" border="0" /><br />
在我没有给出自定义类<font face="Verdana">MyTest和</font><font face="Verdana">cuskey的时候，如果你能猜测出<font face="Verdana">MyTest和</font><font face="Verdana">cuskey大概</font>代码以及为什么的话，你可以省略<br />
下面的这段内容，^_^.下面给出<font face="Verdana">MyTest和</font><font face="Verdana">cuskey的</font>代码。<br />
</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_104805" onclick="this.style.display='none'; Code_Closed_Text_104805.style.display='none'; Code_Open_Image_104805.style.display='inline'; Code_Open_Text_104805.style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"  alt="" /><img id="Code_Open_Image_104805" style="display: none" onclick="this.style.display='none'; Code_Open_Text_104805.style.display='none'; Code_Closed_Image_104805.style.display='inline'; Code_Closed_Text_104805.style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"  alt="" /><span id="Code_Closed_Text_104805" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code</span><span id="Code_Open_Text_104805" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyTest<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_25_497_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_25_497_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_25_497_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_25_497_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_25_497_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_25_497_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_25_497_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_25_497_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_25_497_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_25_497_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;KeyNumber<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_64_154_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_154_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_64_154_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_154_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_154_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_154_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_64_154_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_154_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_64_154_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_64_154_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_94_144_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_94_144_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_94_144_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_94_144_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_94_144_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_94_144_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_94_144_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_94_144_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_94_144_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_94_144_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;keyNumber&nbsp;;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MyTest(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;num)<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img id="Codehighlighter1_228_268_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_228_268_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_228_268_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_228_268_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_228_268_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_228_268_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_228_268_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_228_268_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_228_268_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_228_268_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;num;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;GetHashCode()<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_320_365_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_320_365_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_320_365_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_320_365_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_320_365_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_320_365_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_320_365_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_320_365_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_320_365_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_320_365_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;keyNumber&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;Equals(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;obj)<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img id="Codehighlighter1_423_491_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_423_491_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_423_491_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_423_491_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_423_491_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_423_491_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_423_491_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_423_491_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_423_491_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_423_491_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;keyNumber&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;((MyTest)obj).keyNumber;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;cuskey<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img id="Codehighlighter1_520_764_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_520_764_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_520_764_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_520_764_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_520_764_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_520_764_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_520_764_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_520_764_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_520_764_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_520_764_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;keyNumber;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;KeyNumber<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img id="Codehighlighter1_590_680_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_590_680_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_590_680_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_590_680_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_590_680_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_590_680_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_590_680_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_590_680_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_590_680_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_590_680_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img id="Codehighlighter1_620_670_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_620_670_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_620_670_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_620_670_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_620_670_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_620_670_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_620_670_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_620_670_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_620_670_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_620_670_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;cuskey(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n)<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img id="Codehighlighter1_718_758_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_718_758_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_718_758_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_718_758_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_718_758_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_718_758_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_718_758_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_718_758_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_718_758_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_718_758_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n;&nbsp;<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>好了，当大家看完这两个自定义的类后，我想很大部分人能通过这两个类的区别可以判断出为什么上面的显示结果会是这样的，下面我俩讲解一下。<br />
<font face="Verdana">MyTest和</font><font face="Verdana">cuskey</font>的最大的区别就在于<font face="Verdana">MyTest重写了<font face="Verdana">GetHashCode()方法，而<font face="Verdana">cuskey</font>没有重写<font face="Verdana">GetHashCode()方法</font>，我们都知道net的类型最后都是要继承Object类了，也就是说<font face="Verdana">cuskey</font>是使用Object的<font face="Verdana">GetHashCode()方法，它的每个实例的hashcode的算法都是继承自Object，而<font face="Verdana">MyTest重写了<font face="Verdana">GetHashCode()方法</font></font>，因此<font face="Verdana">MyTest</font>的每个实例的hashcode的算法都是来自重写后的算法。<br />
如上所说，<font face="Verdana">cuskey</font>的每个实例的hashcode是不一样的(Object的<font face="Verdana">GetHashCode()所采用的算法大家有兴趣可以看看</font>)，而<font face="Verdana">MyTest</font>的每个实例的hashcode的算法是依赖其成员<font face="Verdana">keyNumber</font>的值，因此只要<font face="Verdana">keyNumber</font>的值相同，我们就认为其hashcode相同。以上我们对这两个自定义的类进行分析，下面我们回到HashTable上。<br />
最开始我们说HashTable用于处理和表现类似key/value的键值对，Hashtable 对象由包含集合元素的存储桶组成。存储桶是 Hashtable 中各元素的虚拟子组，与大多数集合中进行的搜索和检索相比，存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联，该哈希代码是使用哈希函数生成的并基于该元素的键。哈希函数是基于键返回数值哈希代码的算法。键是正被存储的对象的某一属性的值。哈希函数必须始终为相同的键返回相同的哈希代码。Hashtable 中用作元素的每一对象必须能够使用<font face="Verdana">GetHashCode()</font>方法的实现为其自身生成哈希代码。在将一个对象添加到 HashTable时，它被存储在存储桶中，该存储桶与匹配该对象的哈希代码的哈希代码关联。在 HashTable内搜索一个值时，将为该值生成哈希代码，并且搜索与该哈希代码关联的存储桶。我们这里<font face="Verdana">MyTest和</font><font face="Verdana">cuskey的<font face="Verdana">GetHashCode()</font>方法的实现原理不同，直接导致查找的结果不同。<br />
这样上面的例子就不难解释了，注意<font face="Verdana">key4的那两句运行的话是回报错的哦，应该很简单，就是已经包含这样的key。</font></font></font></font></font></p>
<p></font>HashTable是个很重要的数据结构，里面哈希函数的实现是最重要的。大家有时间可以研究一下，参考《数据结构》。<br />
</p>
<div class="cnblogs_code"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;&nbsp;m&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">;&nbsp;m</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ht.Add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;cuskey(m),&nbsp;m);<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img id="Codehighlighter1_58_244_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_58_244_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_58_244_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_58_244_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_244_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_58_244_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_58_244_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_58_244_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_58_244_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_58_244_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">[{Collections.cuskey}]:1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{Collections.cuskey}]:&nbsp;4&nbsp;&nbsp;[{Collections.cuskey}]:2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{Collections.cuskey}]:3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{Collections.cuskey}]:&nbsp;0&nbsp;&nbsp;<br />
</span><span style="color: #008080">4</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #008000">*/</span></span></div>
<p>看看上面的代码，注释部分就是存储在HashTable的顺序，为什么与insert的顺序不同呢？待续。。。</p>
<p>&nbsp;</p>
 <img src ="http://www.cnblogs.com/gjcn/aggbug/1234560.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41940/" target="_blank">[新闻]惠普139亿美元完成对EDS的收购</a>]]></description></item><item><title>c#3.0系列：Object Initializer 和 Collection Initializer</title><link>http://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html</link><dc:creator>gjcn</dc:creator><author>gjcn</author><pubDate>Tue, 15 Apr 2008 03:21:00 GMT</pubDate><guid>http://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html</guid><wfw:comment>http://www.cnblogs.com/gjcn/comments/1154071.html</wfw:comment><comments>http://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/gjcn/comments/commentRss/1154071.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/gjcn/services/trackbacks/1154071.html</trackback:ping><description><![CDATA[摘要: 对象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers)，就是简化我们的代码，让本来几行才能写完的代码一行写完。这样在LINQ的使用中，我们才不会把一个LINQ表达式写的复杂。 Object InitializersObject Initializer的使用很简单：在通过new 关键字创建对象的时候，将所需的Proeprty置于Ty&nbsp;&nbsp;<a href='http://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html'>阅读全文</a><img src ="http://www.cnblogs.com/gjcn/aggbug/1154071.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41939/" target="_blank">[新闻]搜狗五笔输入法发布</a>]]></description></item><item><title>c#3.0系列：Extension Method</title><link>http://www.cnblogs.com/gjcn/archive/2008/04/11/1148298.html</link><dc:creator>gjcn</dc:creator><author>gjcn</author><pubDate>Fri, 11 Apr 2008 05:16:00 GMT</pubDate><guid>http://www.cnblogs.com/gjcn/archive/2008/04/11/1148298.html</guid><wfw:comment>http://www.cnblogs.com/gjcn/comments/1148298.html</wfw:comment><comments>http://www.cnblogs.com/gjcn/archive/2008/04/11/1148298.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/gjcn/comments/commentRss/1148298.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/gjcn/services/trackbacks/1148298.html</trackback:ping><description><![CDATA[摘要: 我们说在C#3.0中，引入了一些列新的特性，但是个人认为Extension Method这个特性是最爽的，最有创新的。它真正的解决了：在保持现有Type原封不动的情况下对其进行扩展，你可以在对Type的定义不做任何变动的情况下，为之添加所需的方法成员。下面我就来讲讲。C#3.X出来之前大家都知道javascript有个特新Prototype，它就如同C#3.X中的Extension Method。&nbsp;&nbsp;<a href='http://www.cnblogs.com/gjcn/archive/2008/04/11/1148298.html'>阅读全文</a><img src ="http://www.cnblogs.com/gjcn/aggbug/1148298.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41938/" target="_blank">[新闻]新学年开始 大学生适用的十大互联网应用</a>]]></description></item><item><title>c#3.0系列：Automatic Property</title><link>http://www.cnblogs.com/gjcn/archive/2008/04/10/1146387.html</link><dc:creator>gjcn</dc:creator><author>gjcn</author><pubDate>Thu, 10 Apr 2008 03:06:00 GMT</pubDate><guid>http://www.cnblogs.com/gjcn/archive/2008/04/10/1146387.html</guid><wfw:comment>http://www.cnblogs.com/gjcn/comments/1146387.html</wfw:comment><comments>http://www.cnblogs.com/gjcn/archive/2008/04/10/1146387.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/gjcn/comments/commentRss/1146387.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/gjcn/services/trackbacks/1146387.html</trackback:ping><description><![CDATA[<strong>之前的做法：</strong><br />
在c#3.x出来之前，相信大家已经习惯通过一个private field + public property<span style="font-family: 宋体">的发式来定义和实现一个</span>public Property<span style="font-family: 宋体">。就如下面方式实现。
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;person<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_17_303_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_17_303_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_17_303_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_17_303_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_17_303_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_17_303_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_17_303_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_17_303_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_17_303_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_17_303_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_name;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Age<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_105_181_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_105_181_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_105_181_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_105_181_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_105_181_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_105_181_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_105_181_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_105_181_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_105_181_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_105_181_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_123_138_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_123_138_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_123_138_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_123_138_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_123_138_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_123_138_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_123_138_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_123_138_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_123_138_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_123_138_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_155_171_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_155_171_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_155_171_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_155_171_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_155_171_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_155_171_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_155_171_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_155_171_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_155_171_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_155_171_Open_Text"><span style="color: #000000">{&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_217_297_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_217_297_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_217_297_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_217_297_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_217_297_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_217_297_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_217_297_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_217_297_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_217_297_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_217_297_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img id="Codehighlighter1_235_252_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_235_252_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_235_252_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_235_252_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_235_252_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_235_252_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_235_252_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_235_252_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_235_252_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_235_252_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_name;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_269_287_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_269_287_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_269_287_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_269_287_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_269_287_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_269_287_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_269_287_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_269_287_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_269_287_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_269_287_Open_Text"><span style="color: #000000">{&nbsp;_name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</span>显然你可以在Property<span style="font-family: 宋体">中的</span>set/get代码块<span style="font-family: 宋体">中，我们可以不受限制地定义我们的业务逻辑，但是在大多是场合下，我们都是像上面的</span>code<span style="font-family: 宋体">一样直接对一个定义的</span>field<span style="font-family: 宋体">进行操作：对其读写。但是我们如果根据项目的需要，例如作为Business Entity<span style="font-family: 宋体">的</span>Class<span style="font-family: 宋体">，需要封装非常多的数据，我们需要为不同类型的数据分别定义一个</span>Property<span style="font-family: 宋体">，这样不断重复的工作大家一定觉得很厌烦。<br />
<strong><font face="Verdana">Automatic Property</font> Overview<br />
</strong>在c#3.x出来之后，我们可以通过<font face="Verdana">Automatic Property来简化我们的操作。例如：</font><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Employee<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_19_279_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_279_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_279_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_279_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_19_279_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_279_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_279_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_279_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_19_279_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_19_279_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">public&nbsp;string&nbsp;Name&nbsp;{&nbsp;get;&nbsp;}&nbsp;&nbsp;error</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img id="Codehighlighter1_93_106_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_93_106_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_93_106_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_93_106_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_93_106_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_93_106_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_93_106_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_93_106_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name&nbsp;</span><span id="Codehighlighter1_93_106_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_93_106_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_130_149_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_130_149_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_130_149_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_130_149_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_130_149_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_130_149_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_130_149_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_130_149_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;Age</span><span id="Codehighlighter1_130_149_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_130_149_Open_Text"><span style="color: #000000">{</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Employee(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age&nbsp;)<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_204_273_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_204_273_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_204_273_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_204_273_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_204_273_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_204_273_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_204_273_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_204_273_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_204_273_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_204_273_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</span></span>上面的好处我就不用说了。<br />
<strong><font face="Verdana">Automatic Property</font></strong> <strong>IN CLR<br />
</strong>首先让我们看看c#3.x出来之前和出来之后，编译器是怎么处理的：<br />
<img height="257" alt="" src="http://www.cnblogs.com/images/cnblogs_com/gjcn/2.JPG" width="157" border="0" /><br />
大家可以看到，C#3.x<span style="font-family: 宋体">仅仅是基于</span>.NET Programming Language<span style="font-family: 宋体">，而不是基于</span>.NET Framework<span style="font-family: 宋体">的。</span><span style="font-family: 宋体">加了一些必要的</span>code<span style="font-family: 宋体">，使原本我们看起来显得残缺的</span>code<span style="font-family: 宋体">（比如缺少对</span>Property <span style="font-family: 宋体">的实现）变得完整。在运行的时候，这些</span>code<span style="font-family: 宋体">和原来的</span>code<span style="font-family: 宋体">是完全一样的。<font face="Verdana">Automatic </font>Property代码里多处了两个域&lt;Age&gt;k_BackingField和&lt;Name&gt;k_BackingField，他们的作用就是：他们分别对应着两个Property<span style="font-family: 宋体">（</span>Age<span style="font-family: 宋体">，</span>Name<span style="font-family: 宋体">），其作用和person</span><span style="font-family: 宋体">中定义的两个</span>Field<span style="font-family: 宋体">（</span>Age<span style="font-family: 宋体">，</span>Name<span style="font-family: 宋体">）完全一样。代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><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 />
<img id="Codehighlighter1_24_327_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_24_327_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_24_327_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_24_327_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_24_327_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_24_327_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_24_327_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_24_327_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_24_327_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_24_327_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Fields</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[CompilerGenerated]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">Age</span><span style="color: #000000">&gt;</span><span style="color: #000000">k__BackingField;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;[CompilerGenerated]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">Name</span><span style="color: #000000">&gt;</span><span style="color: #000000">k__BackingField;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Methods</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Employee(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Properties</span><span style="color: #008000"><br />
<img id="Codehighlighter1_265_287_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_265_287_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_265_287_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_265_287_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_265_287_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_265_287_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_265_287_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_265_287_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Age&nbsp;</span><span id="Codehighlighter1_265_287_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_265_287_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_311_325_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_311_325_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_311_325_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_311_325_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_311_325_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_311_325_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_311_325_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_311_325_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name&nbsp;</span><span id="Codehighlighter1_311_325_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_311_325_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<strong>Quiz for <font face="Verdana">Automatic Property</font></strong><br />
</span>注意与抽象属性的区别<br />
</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;people<br />
<img id="Codehighlighter1_26_129_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_26_129_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_26_129_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_26_129_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_26_129_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_26_129_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_26_129_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_26_129_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_26_129_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_26_129_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_64_77_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_77_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_64_77_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_77_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_77_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_77_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_64_77_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_77_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span 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">string</span><span style="color: #000000">&nbsp;Name&nbsp;</span><span id="Codehighlighter1_64_77_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_64_77_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_110_123_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_110_123_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_110_123_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_110_123_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_123_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_110_123_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_110_123_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_110_123_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span 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">int</span><span style="color: #000000">&nbsp;Age&nbsp;</span><span id="Codehighlighter1_110_123_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_110_123_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
不能定义只读或者只写的属性，必须同时提供<br />
请看上面<font face="Verdana">Employee</font>。第一行，编译器会报错。<br />
<br />
可以给读和写赋予不同的访问权限<br />
请看上面<font face="Verdana">Employee</font>。Age属性，请注意他的操作权限。<br />
<br />
自动属性的初始化<br />
动属性会为字段自动赋予变量类型的初始值，如果是引用类型，则为null，如果你想初始化，必须要在<br />
自定义的构造函数初始化。请看上面<font face="Verdana">Employee</font>。<br />
<br />
不适用的情况<br />
果想在属性中增加判断、验证等逻辑，则只能用传统的属性定义方法实现 如下：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Age&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_16_227_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_16_227_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_16_227_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_16_227_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_16_227_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_16_227_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_16_227_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_16_227_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_16_227_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_16_227_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_26_41_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_26_41_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_26_41_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_26_41_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_26_41_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_26_41_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_26_41_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_26_41_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_26_41_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_26_41_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_54_225_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_54_225_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_54_225_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_54_225_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_54_225_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_54_225_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_54_225_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_54_225_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_54_225_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_54_225_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((value&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;(value&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;5</span><span style="color: #800080">00</span><span style="color: #000000">))&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_102_132_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_102_132_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_102_132_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_102_132_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_102_132_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_102_132_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_102_132_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_102_132_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_102_132_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_102_132_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_150_219_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_150_219_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_150_219_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_150_219_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_150_219_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_150_219_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_150_219_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_150_219_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_150_219_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_150_219_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArgumentOutOfRangeException&nbsp;&nbsp;(</span><span style="color: #800000">"</span><span style="color: #800000">你不是人！</span><span style="color: #800000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
<br />
<br />
<img src ="http://www.cnblogs.com/gjcn/aggbug/1146387.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41937/" target="_blank">[新闻]Google拟在9月发布自有浏览器 或采用火狐内核</a>]]></description></item><item><title>c#3.0系列：Anonymous Type In CLR(3.5)</title><link>http://www.cnblogs.com/gjcn/archive/2008/04/09/1144851.html</link><dc:creator>gjcn</dc:creator><author>gjcn</author><pubDate>Wed, 09 Apr 2008 06:19:00 GMT</pubDate><guid>http://www.cnblogs.com/gjcn/archive/2008/04/09/1144851.html</guid><wfw:comment>http://www.cnblogs.com/gjcn/comments/1144851.html</wfw:comment><comments>http://www.cnblogs.com/gjcn/archive/2008/04/09/1144851.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/gjcn/comments/commentRss/1144851.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/gjcn/services/trackbacks/1144851.html</trackback:ping><description><![CDATA[<p>我们说Anonymous Type是<strong>C# 3.0的新的特性</strong>，而没有说Anonymous Type是<strong>.NET Framework 3.5</strong>的新特性。这是因为Anonymous Type仅仅是.NET Programming Language和相应的Compiler的新引入的特征。而对于.NET Framework 3.5来说，它看不到这和原来有什么不同，对于Anonymous Type和一般的Named Type，对于CLR来说他们之间没有什么本质的区别。<br />
通过下面这样的一段简单的代码：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_13_40_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_13_40_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_13_40_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_13_40_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_13_40_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_13_40_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_13_40_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_13_40_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">var&nbsp;p1&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 id="Codehighlighter1_13_40_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_13_40_Open_Text"><span style="color: #000000">{&nbsp;Name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">IORI</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;Age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">27</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;</span></div>
然后我们再看看IL：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Code_Closed_Image_104750" onclick="this.style.display='none'; Code_Closed_Text_104750.style.display='none'; Code_Open_Image_104750.style.display='inline'; Code_Open_Text_104750.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_104750" style="display: none" onclick="this.style.display='none'; Code_Open_Text_104750.style.display='none'; Code_Closed_Image_104750.style.display='inline'; Code_Closed_Text_104750.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_104750" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code</span><span id="Code_Open_Text_104750" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">.method</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">hidebysig</span><span style="color: #000000">&nbsp;static&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)&nbsp;</span><span style="color: #0000ff">cil</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">managed</span><span style="color: #000000"><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" />{<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" />&nbsp;&nbsp;</span><span style="color: #0000ff">.entrypoint</span><span style="color: #000000"><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" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Code&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;(0xf)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">.maxstack</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><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" />&nbsp;&nbsp;</span><span style="color: #0000ff">.locals</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">init</span><span style="color: #000000">&nbsp;([</span><span style="color: #800080">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">&lt;&gt;f__AnonymousType0`2</span><span style="color: #800000">'</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">,</span><span style="color: #0000ff">int32</span><span style="color: #000000">&gt;&nbsp;p1)<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #ff00ff">IL_0000:</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">nop</span><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/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #ff00ff">IL_0001:</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">ldstr</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">IORI</span><span style="color: #800000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #ff00ff">IL_0006:</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">ldc.i4.s</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080">27</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #ff00ff">IL_0008:</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">newobj</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">instance</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><spa