<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>梁逸晨</title>
	<atom:link href="http://blog.kvspas.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kvspas.com</link>
	<description>程序员的理想</description>
	<lastBuildDate>Sat, 14 Aug 2010 20:09:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>在数组类型转换中保证O(1)计算。</title>
		<link>http://blog.kvspas.com/2010/08/15/data-structure-traversal/</link>
		<comments>http://blog.kvspas.com/2010/08/15/data-structure-traversal/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 20:09:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kvspas.com/?p=24</guid>
		<description><![CDATA[在数据结构中，我们把为了完成一件事情而需要做的理想算法称为O(1)，大意就是每一个步骤都是有意义的，不存在无用功。]]></description>
			<content:encoded><![CDATA[<p>在数据结构中，我们把为了完成一件事情而需要做的理想算法称为O(1)，大意就是每一个步骤都是有意义的，不存在无用功。</p>
<p>把一个int数组转换为字符串，在原来的每两个int元素之间增加一个半角逗号分隔。传统的算法是：</p>
<p>            var uids = new[] { 1,2,3,4,5,6,7,8,9,0};<br />
            var masters = string.Empty;</p>
<p>            foreach (var i in uids)<br />
            {<br />
                masters = string.Concat(<br />
                    masters,<br />
                    string.Concat(&#8220;,&#8221;,i.ToString())<br />
                    );<br />
            }</p>
<p>           <span style="color: #008000;"> //为了去掉第一个逗号，我们必须在做一次字符串截取，如果字符串过长，就会造成计算成本增<br />
</span>            masters = masters.Substring(1, masters.Length);</p>
<p>我们改用另一种方法，把第一个元素（或者最后一个元素）提取出来，避开传统遍历算法，单独做一次冗余计算，即可避免了不必要的开销。特别是在做类型转换的时候，就像现在的值类型(int)转换成引用类型(string)的时候，可以避免更多的装箱拆箱成本。注意以下例子中的红字0和1。</p>
<p>            <span style="color: #008000;">//把int[]转换为string，各个元素之间插入半角逗号分隔。</span></p>
<p>            for (var i = <span style="color: #ff0000;">1</span>; i &lt; uids.Length &#8211; 1; i++)<br />
            {<br />
                masters = string.Concat(<br />
                   masters ,<br />
                   string.Concat(&#8220;,&#8221; , uids[i].ToString())<br />
                   );<br />
            }</p>
<p>            masters = string.Concat(<span style="color: #008000;"> //提取出第一个元素单独计算<br />
</span>               masters,<br />
               string.Concat(uids[<span style="color: #ff0000;">0</span>].ToString() + masters)<br />
               );</p>
<p>最后的结果：masters == &#8220;1,2,3,4,5,6,7,8,9,0&#8243;;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kvspas.com/2010/08/15/data-structure-traversal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>委托的演化：命名函数、匿名函数、lambda表达式</title>
		<link>http://blog.kvspas.com/2010/08/07/using-delegate/</link>
		<comments>http://blog.kvspas.com/2010/08/07/using-delegate/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 19:54:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kvspas.com/?p=18</guid>
		<description><![CDATA[从匿名函数到lambda表达式，语法逐渐变得简洁。]]></description>
			<content:encoded><![CDATA[<p>public delegate void <span style="color: #3366ff;">method1</span>();</p>
<p>public sealed class UsingDelegate<br />
{<br />
public void _pMethod()<br />
{<br />
Console.WriteLine(&#8220;<span style="color: #993366;">c# 1.0</span>&#8220;);<br />
}</p>
<p>public void Execute</p>
<p>{</p>
<p>method1 <span style="color: #3366ff;">m</span> = new method1(_pMethod);</p>
<p>method1 <span style="color: #3366ff;">m2</span> = delegate()<br />
{<br />
Console.WriteLine(&#8220;<span style="color: #993366;">C# 2.0 Anonymous Functions</span>&#8220;);<br />
};</p>
<p>method1 <span style="color: #3366ff;">m3</span> = () =&gt; { Console.WriteLine(&#8220;<span style="color: #993366;">C# 3.0 Lambda expression</span>&#8220;); };</p>
<p>}</p>
<p>}</p>
<p>从匿名函数到lambda表达式，语法逐渐变得简洁。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kvspas.com/2010/08/07/using-delegate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>再一次强调语义的重要性，在代码说明中也是如此</title>
		<link>http://blog.kvspas.com/2010/07/18/semantic-reply/</link>
		<comments>http://blog.kvspas.com/2010/07/18/semantic-reply/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 14:04:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kvspas.com/?p=15</guid>
		<description><![CDATA[比如我们为一个类型做了这样的说明：

    /// <summary>
    /// 检测信息设置
    /// </summary>
    public abstract class CheckCommon
]]></description>
			<content:encoded><![CDATA[<p>比如我们为一个类型做了这样的说明：</p>
<p>    /// &lt;summary&gt;<br />
    /// 检测信息设置<br />
    /// &lt;/summary&gt;<br />
    public abstract class CheckCommon</p>
<p>“检测信息设置”，这六个字，存在双重语义，可以理解为 “检测&#8212;信息设置”和“检测信息&#8212;设置”，前者是动词-名词的组合，后者是名词-动词的组合，这样子的文字表达方式在多人协同开发环境下，在开发framework的情况下、甚至是半年后自己查看自己编写的这段话，都有可能理解错误。进一步的，就会让基于这个SDK之上开发的程序做了本来不该做的事情。</p>
<p>“检测信息设置” 改为“设置检测信息”，这样子就好多了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kvspas.com/2010/07/18/semantic-reply/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>visualstudio2010,创建ashx时的BUG</title>
		<link>http://blog.kvspas.com/2010/07/16/visualstudio-2010-bug-ashx/</link>
		<comments>http://blog.kvspas.com/2010/07/16/visualstudio-2010-bug-ashx/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 08:31:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kvspas.com/?p=7</guid>
		<description><![CDATA[在创建ASHX文件的时候，如果我们在创建时命名文件为 default.ashx ，在生成文件后会缺少自动命名修正，系统会自动把类命名为 class default {} ，因为default是一个关键字，使不能作为类的命名的，但是visualstudio2010忽略了这一点细节。]]></description>
			<content:encoded><![CDATA[<p>在创建ASHX文件的时候，如果我们在创建时命名文件为 default.ashx ，在生成文件后会缺少自动命名修正，系统会自动把类命名为 class default {} ，因为default是一个关键字，使不能作为类的命名的，但是visualstudio2010忽略了这一点细节。</p>
<p>虽然这不是什么大BUG，但是这事情体现了visualstudio2010还是存在一些小问题的，还有的其它问题比如复制粘贴的时候，经常会出现复制了别的一大串文字。</p>
<p><a href="http://blog.kvspas.com/wp-content/uploads/2010/07/vs2010bug01.png"><img class="alignnone size-full wp-image-8" title="vs2010bug01" src="http://blog.kvspas.com/wp-content/uploads/2010/07/vs2010bug01.png" alt="" width="512" height="404" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kvspas.com/2010/07/16/visualstudio-2010-bug-ashx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>语义的重要性</title>
		<link>http://blog.kvspas.com/2010/07/15/semantic/</link>
		<comments>http://blog.kvspas.com/2010/07/15/semantic/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 08:13:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kvspas.com/blog.kvspas.com/?p=1</guid>
		<description><![CDATA[保持类中存在清晰可读的语义是设计一个好系统的关键，举例说设计封装 ExecuteNoneQuery 的时候，我们就不应该给它添加查询数据的功能，因为查询数据的行为与“NoneQuery”的语义是相悖的，这应该放到DataReader的封装中。
]]></description>
			<content:encoded><![CDATA[<p>保持类中存在清晰可读的语义是设计一个好系统的关键。举例说设计封装 ExecuteNoneQuery 的时候，我们就不应该给它添加查询数据的功能，因为查询数据的行为与“NoneQuery”的语义是相悖的，这应该放到DataReader的封装中。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kvspas.com/2010/07/15/semantic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
