﻿<?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>C++博客-fenglin-文章分类-C#</title><link>http://www.cppblog.com/fenglin/category/17074.html</link><description>创新、创意、挑战</description><language>zh-cn</language><lastBuildDate>Wed, 13 Jul 2011 03:23:20 GMT</lastBuildDate><pubDate>Wed, 13 Jul 2011 03:23:20 GMT</pubDate><ttl>60</ttl><item><title>保护网站安全并使用Web窗体访问数据</title><link>http://www.cppblog.com/fenglin/articles/150750.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Tue, 12 Jul 2011 05:27:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/150750.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/150750.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/150750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/150750.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/150750.html</trackback:ping><description><![CDATA[<div>1、创建登录Web窗体<br />新建一个Web窗体，在其中添加用于用户身份验证的Login控件<br /><br />2、为ASP.NET网站配置安全特性<br />使用&#8220;ASP.NET网站管理工具&#8221;添加和维护用户、定义角色和创建访问规则（选择&#8220;网站&#8221;|&#8220;ASP.NET配置&#8221;来启动该工具）<br /><span style="color: red"><strong><u>注意：在网站路径中不能存在#字符，否则在启动ASP.NET配置管理工具时会失败。</u></strong></span><br /><br /><br />3、实现基于窗体的安全性<br />编辑Web.config文件，将&lt;authentication mode&gt;属性设为"Forms"，指定登录窗体的URL,并指定所需的任何身份验证参数。如：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">authentication&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="Forms"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #008080">2</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forms&nbsp;</span><span style="color: #ff0000">loginUrl</span><span style="color: #0000ff">="LoginForm.aspx"</span><span style="color: #ff0000">&nbsp;timeout</span><span style="color: #0000ff">="5"</span><span style="color: #ff0000">&nbsp;cookieless</span><span style="color: #0000ff">="AutoDetect"</span><span style="color: #ff0000">&nbsp;protection</span><span style="color: #0000ff">="All"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /></span><span style="color: #008080">3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authentication</span><span style="color: #0000ff">&gt;</span></div><br />4、创建一个Web窗体来显示数据库数据<br />向Web窗体添加一个数据源控件，并配置它来连接恰当的数据库；向Web窗体添加一个GridView控件，将其DataSourceId属性设置为数据源控件<br /><br />5、获取数据，并在Web窗体中以便于管理的形式分批显示数据<br />将GridView控件的AllowPaging属性设置为True。将PagerSize属性设置为每页允许显示的行数。修改PagerSettings和PagerStyle属性，使其与Web窗体的样式匹配<br /><br />6、用GridView控件修改数据库中的行<br />确定数据源允许更新数据；在&#8220;GridView任务&#8221;智能标记菜单中选择&#8220;启用更新&#8221;<br /><br />7、选择GridView控件中的一行，从一个Web窗体导航至另一个Web窗体<br />将某列定义成HyperLinkField控件。在DataNavigateUrlFormatString属性中，指定目标窗体的URL和可选的查询字符串，并在DataNavigateUrlFields属性中指定要作为查询字符串参数传给窗体的任何数据；在目标窗体中，通过访问Web窗体的Request属性的QueryString集合来获取任何查询字符串参数<br /><br />8、在运行时，将GridView控件绑定到一个数据源<br />将GridView控件的DataSource属性设置为数据源。将GridView的任何BoundField列的DataField属性设置为数据源中容纳着要显示的数据的属性的名称（以字符串的形式指定）<br />如：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;partial&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;OrderHistory&nbsp;:&nbsp;System.Web.UI.Page<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_55_726_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_726_Open_Text.style.display='none'; Codehighlighter1_55_726_Closed_Image.style.display='inline'; Codehighlighter1_55_726_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_55_726_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_55_726_Closed_Text.style.display='none'; Codehighlighter1_55_726_Open_Image.style.display='inline'; Codehighlighter1_55_726_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_55_726_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_55_726_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Page_Load(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_118_724_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_724_Open_Text.style.display='none'; Codehighlighter1_118_724_Closed_Image.style.display='inline'; Codehighlighter1_118_724_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_118_724_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_118_724_Closed_Text.style.display='none'; Codehighlighter1_118_724_Open_Image.style.display='inline'; Codehighlighter1_118_724_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_118_724_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_118_724_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;customerID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Request.QueryString[</span><span style="color: #000000">"</span><span style="color: #000000">CustomerID</span><span style="color: #000000">"</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.OrderLabel.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;customerID;<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Title&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;customerID;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OrderHistoryDataContext&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;OrderHistoryDataContext();<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;orderDetails&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;context.CustOrderHist(customerID);<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.OrderGrid.DataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;orderDetails;<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoundField&nbsp;productName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.OrderGrid.Columns[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;BoundField;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;productName.DataField&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ProductName</span><span style="color: #000000">"</span><span style="color: #000000">;<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoundField&nbsp;total&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.OrderGrid.Columns[</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;BoundField;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total.DataField&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Total</span><span style="color: #000000">"</span><span style="color: #000000">;<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.OrderGrid.DataBind();<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br /><br /></div><img src ="http://www.cppblog.com/fenglin/aggbug/150750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-07-12 13:27 <a href="http://www.cppblog.com/fenglin/articles/150750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户输入校验</title><link>http://www.cppblog.com/fenglin/articles/149935.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Fri, 01 Jul 2011 11:33:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149935.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149935.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149935.html</trackback:ping><description><![CDATA[<div><strong>1、执行服务器端的用户输入校验</strong><br />利用Server控件的事件，例如TextBox控件的TextChanged事件<br /><br /><strong>2、执行客户端的用户输入校验<br /></strong>使用校验控件。将ControlToValidate属性设为要校验的控件，将ErrorMessage属性设为要显示的错误消息。验证EnableClientScript属性已设为True<br /><br /><strong>3、要求用户必须在文本框内输入值</strong><br />使用RequiredFieldValidator控件<br /><br /><strong>4、检查在文本框中输入的数据的类型和范围</strong><br />使用RangeValidatotr控件。根据需要设置Type，MaximumValue和MinimumValue属性<br /><br /><strong>5、显示校验错误消息汇总</strong><br />使用ValidationSummary控件。确定ShowSummary属性已设为True。如果希望支持动态HTML的浏览器在消息框中显示错误消息，将ShowMessageBox设为True</div><img src ="http://www.cppblog.com/fenglin/aggbug/149935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-07-01 19:33 <a href="http://www.cppblog.com/fenglin/articles/149935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET开发Web应用程序</title><link>http://www.cppblog.com/fenglin/articles/149578.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 27 Jun 2011 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149578.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149578.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149578.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149578.html</trackback:ping><description><![CDATA[<div><strong>1、创建Web应用程序<br /></strong>使用&#8220;ASP.NET网站&#8221;模板新建一个网站。指定是想使用Development Web Server（指定一个文件系统位置和文件名），还是想使用IIS（指定一个HTTP位置和URL）<br /><br /><strong>2、查看并编辑Web窗体的HTML定义</strong><br />在设计视图窗口中单击窗体下方的&#8220;源&#8221;标签（或者按Shift+F7）<br /><br /><strong>3、为Web窗体创建样式<br /></strong>选择&#8220;格式&#8221;|&#8220;新建样式&#8221;。使用&#8220;样式生成器&#8221;对话框来定义窗体的样式<br /><br /><strong>4、在Web窗体上添加HTML控件（使用HTML控件，可以更容易地将现有的ASP网页导入ASP.NET）</strong><br />展开工具箱中的&#8220;HTML&#8221;类型。将控件拖放到Web窗体上<br /><br /><strong>5、为ASP.NET Server控件创建事件处理程序</strong><br />在设计视图中，选定Web窗体上的控件。在&#8220;属性&#8221;窗口中，单击&#8220;事件&#8221;工具栏按钮（有闪电图形的按钮）。找到想要使用的事件，然后输入事件处理方法的名称，或者双击事件来使用默认名称。在&#8220;代码和文本编辑器&#8221;窗口中，编写代码来处理事件<br /><br /><strong>6、创建主题<br /></strong>为网站添加一个App_Themes文件夹。为主题创建一个子文件夹。在这个文件夹中，创建一个外观文件来定义控件的属性<br /><br /><strong>7、向网站应用一个主题<br /></strong>要么使用每个页的@Page属性来指定主题：<br /><a href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#80;&#97;&#103;&#101;&#32;&#84;&#104;&#101;&#109;&#101;&#61;&#34;&#66;&#108;&#117;&#101;&#84;&#104;&#101;&#109;&#101;&#34;&#32;&#46;&#46;&#46;&#46;&#46;&#37;'>%@Page Theme="BlueTheme" .....%</a><br />要么修改Web.config文件，并在pages元素中指定主题：<br />&lt;pages theme="BlueTheme" /&gt;</div><img src ="http://www.cppblog.com/fenglin/aggbug/149578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-27 16:55 <a href="http://www.cppblog.com/fenglin/articles/149578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用数据绑定来显示/编辑数据(WPF&amp;LINQ)</title><link>http://www.cppblog.com/fenglin/articles/149543.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 27 Jun 2011 02:53:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149543.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149543.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149543.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149543.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、使用对象关系设计器创建实体类使用&#8220;LINQ to SQL类&#8221;模板在项目中添加一个新类。使用服务器资源管理器连接数据库，将表从数据库拖放到&#8220;对象关系设计器&#8221;中2、在WPF控件中显示来自实体对象或集合的数据为控件的一个恰当的属性定义绑定。如果控件显示一个对象列表，就将控件的DataContext属性设为一个实体对象集合。如果控件显示单个对象的数据，就...&nbsp;&nbsp;<a href='http://www.cppblog.com/fenglin/articles/149543.html'>阅读全文</a><img src ="http://www.cppblog.com/fenglin/aggbug/149543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-27 10:53 <a href="http://www.cppblog.com/fenglin/articles/149543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ADO.NET,DLINQ查询数据</title><link>http://www.cppblog.com/fenglin/articles/149502.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Sun, 26 Jun 2011 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149502.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149502.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149502.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149502.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、使用ADO.NET来连接SQL Server数据库创建一个SqlConnection对象，在它的ConnectionString属性中指定要使用的数据库，然后调用它的Open方法Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1SqlConne...&nbsp;&nbsp;<a href='http://www.cppblog.com/fenglin/articles/149502.html'>阅读全文</a><img src ="http://www.cppblog.com/fenglin/aggbug/149502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-26 17:14 <a href="http://www.cppblog.com/fenglin/articles/149502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WPF开发</title><link>http://www.cppblog.com/fenglin/articles/149264.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Thu, 23 Jun 2011 04:57:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149264.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149264.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149264.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149264.html</trackback:ping><description><![CDATA[<div>1、创建一个WPF（Windows Presentation Foundation）应用程序<br />使用&#8220;WPF应用程序&#8221;模板<br /><br />2、将控件添加到窗体<br />将控件从&#8220;工具箱&#8221;拖放到窗体<br /><br />3、更新窗体或控件的属性<br />在设计视图中单击窗体或控件。然后选择以下操作之一：<br />A、在&#8220;属性&#8221;窗口（按F4打开）中，选择想要更改的属性，并输入新值<br />B、在XAML窗格中，在&lt;Window&gt;元素或者定义了控件的其它元素中指定属性和值<br /><br />4、查看窗体背后的代码<br />选择以下操作之一：<br />A、选择&#8220;视图&#8221;|&#8220;代码&#8221;<br />B、在设计视图中右击，然后从弹出的快捷菜单中选择&#8220;查看代码&#8221;<br />C、在解决方案资源管理器中，展开窗体的.xaml文件，然后双击下面的.xaml.cs文件<br /><br />5、定义一组互斥的单选按钮<br />在窗体上添加一个面板控件，例如StackPanel。将单选按钮添加到面板中。同一个面板中的所有单选按钮都是互斥的。<br /><br />6、处理控件或窗体的事件<br />在XAML窗格中，添加代码来指定事件（例如输入Closing=''），然后从快捷菜单中，要么选择一个现有的事件处理方法（要有正确的签名），要么选择&lt;新建事件处理程序&gt;命令。然后，在事件方法中写代码来处理事件。<br /><br />7、为WPF窗体创建一个菜单<br />添加一个DockPanel控件，把它放在窗体顶部。然后在DockPanel控件中添加一个Menu控件。<br /><br />8、在菜单中添加菜单项<br />为Menu控件添加MenuItem元素。设置Header属性来指定菜单项的显示文件。为了指定菜单项的访问快捷键，可以在字母前面添加一个下划线字符。<br /><br />9、在菜单中创建一条分隔线<br />为菜单添加一个Seperator元素。<br /><br />10、单击菜单项后执行一个操作<br />选择菜单项，然后为Click事件指定一个事件方法。将你的代码添加到事件方法中。<br /><br />11、创建快捷菜单<br />在Windows资源（&lt;Window.Sources&gt;...&lt;/Window.Sources&gt;）中添加一个ContextMenu。采取和在普通菜单中添加菜单项一样的方式，在快捷菜单中添加菜单项。<br /><br />12、将快捷菜单关联到窗体或控件<br />设置窗体或控件的ContextMenu属性，让这个属性引用快捷菜单。<br /><br />13、动态创建快捷式菜单<br />创建一个ContextMenu对象。使用定义了每个菜单项的MenuItem对象来填充这个对象的Items集合（使用Items.Add方法）。设置窗体或控件的ContextMenu属性，使之引用这个ContextMenu。<br /><br />14、提示用户指定要保存到哪个文件中<br />使用SaveFileDialog类。使用ShowDialog方法来显示对话框。对话框关闭后，FileName属性就包含了用户选择的文件名。<br /><br />15、使用数据绑定技术，将窗体控件的属性与对象的属性绑定<br />在控件属性的XAML代码中，添加&lt;Binding&gt;元素来指定绑定源(一个对象)以及要和对象中的哪个属性绑定。如：<br />&lt;TextBox ...&gt;<br />&nbsp; &lt;TextBox.Text&gt;<br />&nbsp;&nbsp;&nbsp; &lt;Binding Source="{StaticResource customerData}"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Path="ForeName" /&gt;<br />&nbsp; &lt;/TextBox.Text&gt;<br />&lt;/TextBox&gt;<br /><br />16、允许一个数据绑定对用户输入的数据进行校验<br />为&lt;Binding&gt;元素添加&lt;Binding.ValidationRules&gt;子元素。如：<br />&lt;Binding Source="{StaticResource customerData}" Path="ForeName" /&gt;<br />&nbsp; &lt;Binding.ValidationRules&gt;<br />&nbsp;&nbsp;&nbsp; &lt;ExceptionValidationRules /&gt;<br />&nbsp; &lt;/Binding.ValidationRules&gt;<br />&lt;/Binding&gt;<br /><br />17、采用使用记不反感的方式显示错误信息<br />定义一个样式，它负责检测对控件的Validation.HasError属性的更改，并将控件的ToolTip属性设为异常所返回的消息。将此样式应用于需要校验的所有控件。如：<br />&lt;Style x:Key="errorStyle" TargetType="Control"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Style.Triggers&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Trigger Property="Validation.HasError" Value="True"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Trigger&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Style.Triggers&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Style&gt;<br /><br />18、在程序控制下校验所有控件，而不是在用户从一个控件切换到另一个控件时进行校验<br />在定义绑定的XAML代码中，将UpdateSourceTrigger属性设为"Explicit"，从而将校验推迟到应用程序明确要求进行校验的时候。为了标准化所有控件的数据，请为每个控件的已绑定的属性创建一个BindingExpression对象，并调用该对象的UpdateSource方法。检查每个BindingExpression对象的HasError属性。如果这个属性为true，表明校验失败。</div><img src ="http://www.cppblog.com/fenglin/aggbug/149264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-23 12:57 <a href="http://www.cppblog.com/fenglin/articles/149264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义结构/类的操作符重载</title><link>http://www.cppblog.com/fenglin/articles/149058.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 20 Jun 2011 10:55:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149058.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149058.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149058.html</trackback:ping><description><![CDATA[<div><strong>1、实现操作符<br /></strong>先写关键字public和static，后跟返回类型，后跟operator关键字，再后跟要声明的操作符符号，最后在一对圆括号中添加恰当的参数。如：<br />struct Hour<br />{<br />&nbsp; ...<br />&nbsp; public static bool operator==(Second lhs, Second rhs)<br />&nbsp;{<br />&nbsp; ...<br />&nbsp; }<br />&nbsp; ...<br />}<br /><br /><strong>2、声明转换操作符<br /></strong>先写关键字public和static，后跟关键字implicit(隐式转换)或explicit(显示转换)，后跟operator关键字，后跟要转换成的目标类型，然后在一对圆括号中添加一个参数来表示转换时的来源类型。如：<br />struct Hour<br />{<br />&nbsp; ...<br />&nbsp; public static implicit operator Hour(int arg)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; ...<br />&nbsp;&nbsp;}<br />&nbsp; ...<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/149058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-20 18:55 <a href="http://www.cppblog.com/fenglin/articles/149058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用查询表达式来查询内存中的数据（LINQ）</title><link>http://www.cppblog.com/fenglin/articles/149055.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 20 Jun 2011 10:13:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149055.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149055.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149055.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149055.html</trackback:ping><description><![CDATA[<div><strong>1、从可枚举集合project指定的字段<br /></strong>使用Select方法，用lambda表达式来标识要project的字段。如：<br />var customerFirstNames=customers.Select(cust=&gt;cust.FirstName);<br /><u style="color: red">或者使用from和select 查询操作符。如：<br />var customerFirstNames=from cust in customers select cust.FirstName;</u><u><br /></u><br /><strong>2、筛选来自可枚举集合的</strong><br />使用Where方法，用lambda表达式来指定行的匹配条件。如：<br />var usCompanies=addresses.Where(addr=&gt;String.Equals(addr.Country,"United States")).Select(usComp=&gt;usComp.CompanyName);<br /><u style="color: red">或者使用where查询操作符。如：<br />var usCompanies=from a in addresses where String.Equals(a.Country,"United States")<br />select a.CompanyName;</u><br /><br /><strong>3、按特定顺序枚举数据<br /></strong>使用OrderBy方法，用lambda表达式来标识用于对行进行排序的字段。如：<br />var companyNames=addresses.OrderBy(addr=&gt;addr.CompanyName).Select(comp=&gt;comp.CompanyName);<br /><u style="color: red">或者使用orderby查询操作符。如：<br />var companyNames=from a in addresses orderby a.CompanyName select a.CompanyName;</u><u><br /></u><br /><strong>4、根据一个字段的值对数据进行分组</strong><br />使用GroupBy方法，用lambda表达式来标识用于对行进行分组的字段。如：<br />var companiesGroupedByCountry=addresses.GroupBy(addrs=&gt;addrs.Country);<br /><u style="color: red">或者使用group by查询操作符。如：<br />var companiesGroupedByCountry=from a in addresses group a by a.Country;</u><u><br /></u><br /><strong>5、联接两个不同集合中的数据</strong><br />使用Join方法来指定要联接的集合，联接条件，以及结果字段。如：<br />var citiesAndCustomers=customers.Select(c=&gt;new{c.FirstName,c.LastName,c.CompanyName}).Join(addresses,custs=&gt;custs.CompanyName,addrs=&gt;addrs.CompanyName,(custs,addrs)=&gt;new{custs.FirstName,custs.LastName,addrs.Country});<br /><u style="color: red">或者使用join查询操作符。如：<br />var citiesAndCustomers=from a in addresses join c in customers on a.CompanyName equals c.CompanyName select new{c.FirstName,c.LastName,a.Country};</u><u><br /></u><br /><strong>6、强迫立即生成LINQ查询结果<br /></strong>使用ToList或ToArray方法生成包含结果的列表或数组。如：<br />var allEmployees=from e in empTree.ToList&lt;Employee&gt;() select e;<br /><br />//应该尽量使用其泛型方法;将数据缓存于内存中，因此无法查到最新的数据。<br /></div><img src ="http://www.cppblog.com/fenglin/aggbug/149055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-20 18:13 <a href="http://www.cppblog.com/fenglin/articles/149055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>枚举集合</title><link>http://www.cppblog.com/fenglin/articles/149044.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 20 Jun 2011 08:40:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149044.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149044.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149044.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149044.html</trackback:ping><description><![CDATA[<div><strong>1、使一个类&#8220;可枚举&#8221;，允许它支持foreach结构<br /></strong>实现IEnumerable接口，并提供一个GetEnumerator方法来返回一个IEnumerator对象。如：<br />public class Tree&lt;TItem&gt;:IEnumerable&lt;TItem&gt;<br />{<br />...<br />IEnumerator&lt;TItem&gt; GetEnumerator()<br />{<br />...<br />}<br />}<br /><br /><strong>2、在不用迭代器的前提下实现一个枚举器</strong><br />定义一个枚举器类，它应该实现IEnumerator接口，并在接口中提供Current属性和MoveNext（并可选择提供Reset）方法。如：<br />public class TreeEnumerator&lt;TItem&gt;:IEnumerator&lt;T&gt;<br />{<br />...<br />TItem Current<br />{<br />&nbsp; get<br />&nbsp; {<br />&nbsp; ...<br />&nbsp;&nbsp; }<br />}<br /><br />bool MoveNext()<br />{<br />&nbsp; ...<br />}<br />}<br /><br /><strong>3、用迭代器来实现一个枚举器</strong><br />使用yield语句来实现枚举器。yield指定了要返回的数据项以及以什么顺序返回。如：<br />IEnumerator&lt;TItem&gt; GetEnumerator()<br />{<br />&nbsp; for(...)<br />&nbsp;&nbsp; yield return ...<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/149044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-20 16:40 <a href="http://www.cppblog.com/fenglin/articles/149044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>泛型</title><link>http://www.cppblog.com/fenglin/articles/149015.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 20 Jun 2011 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149015.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149015.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149015.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149015.html</trackback:ping><description><![CDATA[<div><strong>1、创建泛型类<br /></strong>使用类型参数来定义类。如：<br />public class Tree&lt;TItem&gt;<br />{<br />&nbsp; ...<br />}<br /><br /><strong>2、实例化泛型类的对象</strong><br />指定具体的类型参数。如：<br />Tree&lt;char&gt; charTree = new Tree&lt;char&gt;('M');<br /><br /><strong>3、对泛型类的类型参数进行限制<br /></strong>定义类时，使用where 子句来指定约束。如：<br />public class Tree&lt;TItem&gt; where TItem:IComparable&lt;TItem&gt;<br />{<br />...<br />}<br /><br /><strong>4、定义泛型方法</strong><br />使用类型参数来定义方法。如：<br />static void InsertIntoTree&lt;TItem&gt;(Tree&lt;TItem&gt; tree, params TItem[] data) <br />{<br />...<br />}<br />加约束则为：<br />static void InsertIntoTree&lt;TItem&gt;(Tree&lt;TItem&gt; tree, params TItem[] data) where TItem : IComparable&lt;TItem&gt;<br /><br /><strong>5、调用泛型方法</strong><br />为每个类型参数都提供恰当的类型。如：<br />InsertIntoTree&lt;char&gt;(charTree, 'X', 'A', 'M', 'Z', 'Z', 'N');</div><img src ="http://www.cppblog.com/fenglin/aggbug/149015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-20 11:53 <a href="http://www.cppblog.com/fenglin/articles/149015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中断程序流程并处理事件（委托、事件）</title><link>http://www.cppblog.com/fenglin/articles/149008.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Mon, 20 Jun 2011 02:32:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/149008.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/149008.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/149008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/149008.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/149008.html</trackback:ping><description><![CDATA[<div><strong>1、声明委托类型<br /></strong>先写关键字delegate,再写返回类型，再写委托名称，然后在一对()中添加参数列表。如：<br />delegate void myDelegate();<br /><br /><strong>2、创建委托的实例，并用一个具体的方法来初始化它</strong><br />如：<br />delegate void myDelegate();<br />private void myMethod(){...}<br />...<br />myDelegate del = new myDelegate(this.myMethod);<br /><br /><strong>3、调用委托<br /></strong>如：<br />myDelegate del;<br />...<br />del();<br /><br /><strong>4、声明事件</strong><br />先写关键字event，再写类型的名称（类型必须是一个委托类型），再写事件的名称。如：<br />delegate void myDelegate();<br /><br />class MyClass<br />{<br />&nbsp; public event myDelagate MyEvent;<br />}<br /><br /><strong>5、订阅事件（成为事件的订阅者）</strong><br />用new操作符创建一个委托实例（该委托具有与事件相同的类型），然后使用+=操作符，将委托实例同事件关联起来。如<br />class MyEventHandlingClass<br />{<br />...<br />public void Start()<br />{<br />&nbsp; myClass.MyEvent += new myDelegate(this.eventHandlingMethod);<br />}<br /><br />private void eventHandlingMethod()<br />{<br />&nbsp; ...<br />}<br /><br />private MyClass myClass = new MyClass();<br />}<br />还可以直接指定订阅方法，让编译器自动生成新的委托：<br /><strong>public void Start()<br />{<br />&nbsp; myClass.MyEvent += this.eventHandlingMethod;<br />}<br /></strong><br /><strong>6、取消订阅事件（不再成为一个事件的订阅者）</strong><br />创建一个委托实例（该委托具有与事件相同的类型），然后使用-=操作符，使委托实例从事件中脱离。如：<br />class MyEventHandlingClass<br />{<br />&nbsp; ...<br />&nbsp; public void Stop()<br />{<br />myClass.MyEvent -= new myDelegate(this.eventHandlingMethod);<br />}<br /><br />private void eventHandlingMethod()<br />{<br />&nbsp; ...<br />}<br /><br />private MyClass myClass = new MyClass();<br />}<br /><br />或者：<br /><br /><strong>public void Stop()<br />{<br />&nbsp; myClass.myEvent -= this.eventHandlingMethod;<br />}</strong><br /><br /><strong>7、引发一个事件<br /></strong>像调用方法那样&#8220;调用&#8221;事件（在事件名称后添加一对圆括号）。如果定义事件的委托要求参数，那么还要提供对应的实参。引发事件之前，不要忘记检查事件是否为null。如：<br />class MyClass<br />{<br />public event myDelegate MyEvent;<br />...<br />private void RaiseEvent()<br />{<br />if(this.MyEvent != null)<br />{<br />&nbsp; this.MyEvent();<br />}<br />}<br />...<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/149008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-20 10:32 <a href="http://www.cppblog.com/fenglin/articles/149008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用索引器</title><link>http://www.cppblog.com/fenglin/articles/148875.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Fri, 17 Jun 2011 09:39:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148875.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148875.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148875.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148875.html</trackback:ping><description><![CDATA[<div>1、为类或结构创建索引器<br />声明索引器类型，后跟关键字this，然后在方括号中添加索引器参数。如<br />struct RawInt<br />{<br />&nbsp; ...<br />&nbsp; public bool this[int index]<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; get{...}<br />&nbsp;&nbsp;&nbsp; set{...}<br />&nbsp;&nbsp; }<br />&nbsp; ...<br />}<br /><br />2、在接口中定义索引器<br />使用get以及/或者set关键字来定义一个索引器。如<br />interface IRawInt<br />{<br />&nbsp; bool this [int index]{get;set;}<br />}<br /><br />3、在类或结构中实现一个接口索引器<br />如<br />struct RawInt:IRawInt<br />{<br />&nbsp; ...<br />&nbsp; public bool this[int index]<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; get{...}<br />&nbsp;&nbsp;&nbsp; set{...}<br />&nbsp; }<br />&nbsp; ...<br />}<br /><br />4、在类或结构中，采取&#8220;显式接口实现&#8221;来实现接口定义的索引器<br />在实现接口的类或结构中，显式命名接口，但不要指定索引器的可访问性。如<br />struct RawInt : IRawInt<br />{<br />&nbsp; ...<br />&nbsp; bool IRawInt.this [int index]<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp; get{...}<br />&nbsp;&nbsp;&nbsp;&nbsp; set{...}<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; ...<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/148875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-17 17:39 <a href="http://www.cppblog.com/fenglin/articles/148875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现属性以访问字段</title><link>http://www.cppblog.com/fenglin/articles/148842.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Fri, 17 Jun 2011 03:10:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148842.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148842.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148842.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148842.html</trackback:ping><description><![CDATA[<div>1、为结构或者类声明一个可读/可写的属性<br />struct Screen Position<br />{<br />&nbsp; ...<br />&nbsp; public int X<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {...}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set {...}<br />&nbsp; }<br />...<br />}<br /><br />2、为结构或者类声明一个只读属性<br />struct Screen Position<br />{<br />&nbsp; ...<br />&nbsp; public int X<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {...}<br />&nbsp; }<br />...<br />}<br /><br />3、为结构或者类声明一个只写属性<br />struct Screen Position<br />{<br />&nbsp; ...<br />&nbsp; public int X<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set {...}<br />&nbsp; }<br />...<br />}<br /><br />4、在接口中声明一个属性<br />interface IScreenPosition<br />{<br />&nbsp; int X{get;set;}<br />&nbsp; int Y {get;set;}<br />}<br /><br />5、在结构或者类中实现一个接口属性<br />struct&nbsp;ScreenPosition:IScreenPosition<br />{<br />&nbsp; public int X{...}<br />&nbsp; public int Y {...}<br />}<br /><br />6、创建一个自动属性<br /></div>
<p>&nbsp;&nbsp;&nbsp; class Polygon<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int NumSides { get; set; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public double SideLength { get; set; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Polygon()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.NumSides = 4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.SideLength = 10.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p><br />Polygon square = new Polygon();<br />Polygon triangle = new Polygon { NumSides = 3 };<br />Polygon pentagon = new Polygon { SideLength = 15.5, NumSides = 5 };<br /><br /><br />注：<br /><strong>只有在一个结构或类初始化好之后，才能通过这个结构或类的属性来进行赋值。<br /></strong>ScreenPosition location;<br />location.X=40;//编译时错误，location尚未使用new来初始化<br /><br /><strong>不可将属性作为一个ref或者out参数值传给一个方法；但可以将一个可写的字段作为ref或out参数值来传递。这是由于属性并不真正指向一个内存位置，相反，它指向的是一个访问方法。</strong><br /><br /><strong>在一个属性中，最多只能包含一个get accessor和一个set accessor。属性不能包含其它方法、字段或属性。</strong><br /><br /><strong>get accessor和set accessor不能获取任何参数。要赋的值会通过内建的、隐藏的value变量，自动传给set accessor。</strong><br /><br /><strong>不能声明const属性。如</strong><br />const int X{get{...}set{...}}//编译时错误</p><img src ="http://www.cppblog.com/fenglin/aggbug/148842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-17 11:10 <a href="http://www.cppblog.com/fenglin/articles/148842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>垃圾回收管理</title><link>http://www.cppblog.com/fenglin/articles/148829.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Fri, 17 Jun 2011 01:26:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148829.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148829.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148829.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148829.html</trackback:ping><description><![CDATA[<div>1、析构函数<br />class Test<br />{<br />&nbsp;&nbsp; public Test()//构造函数<br />&nbsp;&nbsp; {<br />&nbsp;...<br />&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp; ~Test()//析构函数<br />&nbsp;&nbsp; {<br />&nbsp;...<br />&nbsp;&nbsp; }<br /><br />析构函数只适用于引用类型；不能给析构函数加访问权限修饰符；析构函数不能带参数；只有垃圾回收器才能调用析构函数。<br /><br />2、异常安全的disposal方法<br />注：强调的是方法的用途而不是名称。换言之，一个disposal方法可以使用任何有效的C#方法名，而不说专门存在一个名为disposal的方法。比如TextReader的close方法<br /><br />3、using语句<br />using(TextReader reader = new StreamReader(fileName))<br />{<br /><br />&nbsp; ...<br />}<br /><br />4、强制垃圾回收（不推荐）<br />调用 &nbsp;System.GC.Collect()</div><img src ="http://www.cppblog.com/fenglin/aggbug/148829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-17 09:26 <a href="http://www.cppblog.com/fenglin/articles/148829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>interface,abstract,sealed</title><link>http://www.cppblog.com/fenglin/articles/148724.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Wed, 15 Jun 2011 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148724.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148724.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148724.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148724.html</trackback:ping><description><![CDATA[<div>1、声明一个接口<br />interface IDemo<br />{<br />string Name();<br />...<br />}<br /><br />2、实现一个接口<br />class Test:IDemo<br />{<br />&nbsp; public string IDemo.Name()//必须写接口前缀<br />&nbsp; {<br />&nbsp;&nbsp; ...<br />&nbsp; }<br />}<br /><br />3、抽象类，必须作为基类继承其的非抽象类才能实例化<br />abstract class Test<br />{<br />&nbsp; abstract string Name();<br />...<br />}<br /><br />4、密封类（不允许被继承）<br />sealed class Test<br />{<br />...<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/148724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-15 17:34 <a href="http://www.cppblog.com/fenglin/articles/148724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>interface,virtual,override,sealed</title><link>http://www.cppblog.com/fenglin/articles/148714.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Wed, 15 Jun 2011 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148714.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148714.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148714.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148714.html</trackback:ping><description><![CDATA[<div>interface 引入一个方法的名称。<br />virtual 方法是方法的第一个实现。<br />override 方法是方法的另一个实现。<br />sealed 方法则是方法的最后一个实现。</div><img src ="http://www.cppblog.com/fenglin/aggbug/148714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-15 15:55 <a href="http://www.cppblog.com/fenglin/articles/148714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>继承、扩展</title><link>http://www.cppblog.com/fenglin/articles/148711.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Wed, 15 Jun 2011 07:03:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148711.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148711.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148711.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148711.html</trackback:ping><description><![CDATA[<div>1、从基类创建一个派生类<br />class Derived:Base<br />{<br />...<br />}<br />2、在派生类的构造函数中调用基类构造函数<br />class Derived:Base<br />{<br />...<br />&nbsp; public Derived(int x):base(x)<br />&nbsp; {<br />&nbsp;&nbsp; ...<br />&nbsp;&nbsp; }<br />...<br />}<br />3、声明一个virtual方法<br />class Mammal<br />{<br />&nbsp; public virtual void Breathe()<br />&nbsp; {<br />&nbsp; ...<br />&nbsp; }<br />...<br />}<br />4、在派生类中实现一个方法，让它覆盖一个继承的virtual方法<br />class Whale : Mammal<br />{<br />&nbsp; public override void Breathe()<br />&nbsp; {<br />&nbsp; ...<br />&nbsp; }<br />}<br />5、为一个类型定义扩展方法<br />static class Util<br />{<br />&nbsp; public static int Negate(this int i)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; return -i;<br />&nbsp; }<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/148711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-15 15:03 <a href="http://www.cppblog.com/fenglin/articles/148711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数组参数</title><link>http://www.cppblog.com/fenglin/articles/148699.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Wed, 15 Jun 2011 02:40:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148699.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148699.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148699.html</trackback:ping><description><![CDATA[<div>1、为方法声明一个给定类型的params数组参数，可以接受任意数量给定类型的参数<br />如：<br />someType Method(params int[] numbers)<br />{<br />&nbsp;...<br />}<br /><br />2、为方法声明一个object类型的params数组参数，可以接受任意数量、任意类型的参数<br />如：<br />someType Method(params object[] paramList)<br />{<br />&nbsp;...<br />}</div><img src ="http://www.cppblog.com/fenglin/aggbug/148699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-15 10:40 <a href="http://www.cppblog.com/fenglin/articles/148699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数组</title><link>http://www.cppblog.com/fenglin/articles/148696.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Wed, 15 Jun 2011 02:08:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148696.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148696.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148696.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148696.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">数组<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Time[]&nbsp;times&nbsp;=&nbsp;new&nbsp;Time[2]&nbsp;{&nbsp;new&nbsp;Time(21,&nbsp;7,&nbsp;10),&nbsp;new&nbsp;Time(9,&nbsp;10,&nbsp;11)&nbsp;};<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Time[]&nbsp;copyToTimes&nbsp;=&nbsp;new&nbsp;Time[times.Length];<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">times.CopyTo(copyToTimes,&nbsp;0);<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">foreach&nbsp;(Time&nbsp;time&nbsp;in&nbsp;copyToTimes)<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(time.ToString());<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">10</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ArrayList数组</span><span style="color: #008000"><br /></span><span style="color: #008080">11</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;times&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;times.Add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Time(</span><span style="color: #000000">21</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">));<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;times.Add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Time(</span><span style="color: #000000">9</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">11</span><span style="color: #000000">));<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time[]&nbsp;copyToTimes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Time[times.Count];<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;times.CopyTo(copyToTimes,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(Time&nbsp;time&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;copyToTimes)<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_663_729_Open_Image" onclick="this.style.display='none'; Codehighlighter1_663_729_Open_Text.style.display='none'; Codehighlighter1_663_729_Closed_Image.style.display='inline'; Codehighlighter1_663_729_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_663_729_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_663_729_Closed_Text.style.display='none'; Codehighlighter1_663_729_Open_Image.style.display='inline'; Codehighlighter1_663_729_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_663_729_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_663_729_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(time.ToString());<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  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">22</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">队列<br /></span><span style="color: #008080">24</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Queue&lt;int&gt;&nbsp;queue&nbsp;=&nbsp;new&nbsp;Queue&lt;int&gt;();<br /></span><span style="color: #008080">25</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">foreach&nbsp;(int&nbsp;i&nbsp;in&nbsp;new&nbsp;int[]&nbsp;{&nbsp;8,&nbsp;10,&nbsp;2,&nbsp;3,&nbsp;6,&nbsp;5&nbsp;})<br /></span><span style="color: #008080">26</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">27</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;queue.Enqueue(i);<br /></span><span style="color: #008080">28</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008080">29</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">while(queue.Count&gt;0)<br /></span><span style="color: #008080">30</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">31</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(queue.Dequeue());<br /></span><span style="color: #008080">32</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008080">33</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">34</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">堆栈<br /></span><span style="color: #008080">35</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Stack&lt;int&gt;&nbsp;stack&nbsp;=&nbsp;new&nbsp;Stack&lt;int&gt;();<br /></span><span style="color: #008080">36</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">foreach&nbsp;(int&nbsp;i&nbsp;in&nbsp;new&nbsp;int[]&nbsp;{&nbsp;8,&nbsp;10,&nbsp;2,&nbsp;3,&nbsp;6,&nbsp;5&nbsp;})<br /></span><span style="color: #008080">37</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">38</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;stack.Push(i);<br /></span><span style="color: #008080">39</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008080">40</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">while&nbsp;(stack.Count&nbsp;&gt;&nbsp;0)<br /></span><span style="color: #008080">41</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">42</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(stack.Pop());<br /></span><span style="color: #008080">43</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008080">44</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">45</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Hashtable&nbsp;不允许有重复KEY的元素<br /></span><span style="color: #008080">46</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Hashtable&nbsp;ages&nbsp;=&nbsp;new&nbsp;Hashtable();<br /></span><span style="color: #008080">47</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages["don"]&nbsp;=&nbsp;27;<br /></span><span style="color: #008080">48</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages["fly"]&nbsp;=&nbsp;27;<br /></span><span style="color: #008080">49</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages["don"]&nbsp;=&nbsp;29;</span><span style="color: #008000">//</span><span style="color: #008000">不会抛异常，但会将此key的value覆盖<br /></span><span style="color: #008080">50</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages.Add("don",&nbsp;29);</span><span style="color: #008000">//</span><span style="color: #008000">会抛异常<br /></span><span style="color: #008080">51</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">foreach&nbsp;(DictionaryEntry&nbsp;e&nbsp;in&nbsp;ages)<br /></span><span style="color: #008080">52</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">53</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;name&nbsp;=&nbsp;e.Key.ToString();<br /></span><span style="color: #008080">54</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;age&nbsp;=&nbsp;(int)e.Value;<br /></span><span style="color: #008080">55</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Name:{0},Age:{1}",&nbsp;name,&nbsp;age);<br /></span><span style="color: #008080">56</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008080">57</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">58</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">SortedList&nbsp;元素已自动排序<br /></span><span style="color: #008080">59</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">SortedList&nbsp;ages&nbsp;=&nbsp;new&nbsp;SortedList();<br /></span><span style="color: #008080">60</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages["sun"]&nbsp;=&nbsp;28;<br /></span><span style="color: #008080">61</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages["fly"]&nbsp;=&nbsp;27;<br /></span><span style="color: #008080">62</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ages["don"]&nbsp;=&nbsp;27;<br /></span><span style="color: #008080">63</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">foreach&nbsp;(DictionaryEntry&nbsp;e&nbsp;in&nbsp;ages)<br /></span><span style="color: #008080">64</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008080">65</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;name&nbsp;=&nbsp;e.Key.ToString();<br /></span><span style="color: #008080">66</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;age&nbsp;=&nbsp;(int)e.Value;<br /></span><span style="color: #008080">67</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Name:{0},Age:{1}",&nbsp;name,&nbsp;age);<br /></span><span style="color: #008080">68</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}</span></div><img src ="http://www.cppblog.com/fenglin/aggbug/148696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-15 10:08 <a href="http://www.cppblog.com/fenglin/articles/148696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>传值、传引用</title><link>http://www.cppblog.com/fenglin/articles/148633.html</link><dc:creator>风林</dc:creator><author>风林</author><pubDate>Tue, 14 Jun 2011 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/fenglin/articles/148633.html</guid><wfw:comment>http://www.cppblog.com/fenglin/comments/148633.html</wfw:comment><comments>http://www.cppblog.com/fenglin/articles/148633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/fenglin/comments/commentRss/148633.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/fenglin/services/trackbacks/148633.html</trackback:ping><description><![CDATA[1、传值<br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_32_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_87_Open_Text.style.display='none'; Codehighlighter1_32_87_Closed_Image.style.display='inline'; Codehighlighter1_32_87_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_32_87_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_32_87_Closed_Text.style.display='none'; Codehighlighter1_32_87_Open_Image.style.display='inline'; Codehighlighter1_32_87_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_32_87_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_32_87_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n</span><span style="color: #000000">=</span><span style="color: #000000">10</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;add(n);<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;Console.WriteLine(n);</span><span style="color: #008000">//</span><span style="color: #008000">n=10</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;num)<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_123_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_123_134_Open_Text.style.display='none'; Codehighlighter1_123_134_Closed_Image.style.display='inline'; Codehighlighter1_123_134_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_123_134_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_123_134_Closed_Text.style.display='none'; Codehighlighter1_123_134_Open_Image.style.display='inline'; Codehighlighter1_123_134_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_123_134_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_123_134_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;num</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>2、传引用ref、out<br /><span style="color: #008080">&nbsp;
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_48_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_144_Open_Text.style.display='none'; Codehighlighter1_48_144_Closed_Image.style.display='inline'; Codehighlighter1_48_144_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_48_144_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_48_144_Closed_Text.style.display='none'; Codehighlighter1_48_144_Open_Image.style.display='inline'; Codehighlighter1_48_144_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_48_144_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_48_144_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">7</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(</span><span style="color: #0000ff">ref</span><span style="color: #000000">&nbsp;a);<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(a);</span><span style="color: #008000">//</span><span style="color: #008000">a=8</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_191_220_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_220_Open_Text.style.display='none'; Codehighlighter1_191_220_Closed_Image.style.display='inline'; Codehighlighter1_191_220_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_191_220_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_191_220_Closed_Text.style.display='none'; Codehighlighter1_191_220_Open_Image.style.display='inline'; Codehighlighter1_191_220_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;add(</span><span style="color: #0000ff">ref</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;num)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_191_220_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_191_220_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div></span>ref与out都为传引用，主要的区别在于：ref前缀的参数在传入前必须初始化,而out前缀的参数则不然，可以在调用函数里初始化参数。<img src ="http://www.cppblog.com/fenglin/aggbug/148633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/fenglin/" target="_blank">风林</a> 2011-06-14 15:24 <a href="http://www.cppblog.com/fenglin/articles/148633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>