﻿<?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>博客园-van's zone</title><link>http://www.cnblogs.com/JiaweiZONE/</link><description>thinking in .NET.....</description><language>zh-cn</language><lastBuildDate>Sun, 12 Oct 2008 18:57:54 GMT</lastBuildDate><pubDate>Sun, 12 Oct 2008 18:57:54 GMT</pubDate><ttl>60</ttl><item><title>C#3.0 新特性速览(2)</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/29/910645.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Sat, 29 Sep 2007 05:52:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/29/910645.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/910645.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/29/910645.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/910645.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/910645.html</trackback:ping><description><![CDATA[<p><font size="2">　　上篇文章中介绍了C# 3.0中比较简单的四个特性，分别是<strong>隐式类型化本地变量</strong>、<strong>匿名类型</strong>、</font><a><strong><font color="#000000" size="2">隐式类型化数组</font></strong></a><font size="2">，以及<strong>对象构造者</strong>，下面我将对C# 3.0中的较复杂，同时也是非常强大的几个特性进行介绍，供大家快速浏览。<br />
<br />
<br />
</font></p>
<p><font size="2">第五个特性：<strong>集合构造者</strong></font></p>
<p><font size="2"><strong>　　</strong>我们可以在声明数组的同时，为其指定初始值，方法是直接在数组声明的后面跟上初始值列表。这样就使数组的初始化工作变得简单，而对于我们自己创建的集合类型，就无法享受到与普通数组一样的待遇了，我们无法在创建自定义集合对象的同时，使用数组的初始化语法为其指定初始值。</font></p>
<p><font size="2">　　C# 3.0中加入的<strong>集合构造者</strong>特性，可使我们享受到与普通数组一样的待遇，从而在创建集合对象的同时为其指定初始值。为了做到这一点，我们需要让我们的集合实现<font color="#008080">ICollection</font>&lt;T&gt;接口，在这个接口中，完成初始化操作的关键在于Add函数，当我使用初始化语法为集合指定初始值时，C#编译器将自动调用<font color="#008080">ICollection</font>&lt;T&gt;中的Add函数将初始列表中的所有元素加入到集合中，以完成集合的初始化操作。使用示例如下：</font></p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span>    <span class="kwrd">class</span> <font color="#008080">CollectionInitializer</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre>
<pre><span class="lnum">   2:  </span>    {</pre>
<pre><span class="lnum">   3:  </span>        <span class="kwrd">class</span> <font color="#008080">StringCollection</font> : <font color="#008080">ICollection</font>&lt;<span class="kwrd">string</span>&gt;</pre>
<pre><span class="lnum">   4:  </span>        {</pre>
<pre><span class="lnum">   5:  </span>            <span class="kwrd">public</span> <span class="kwrd">void</span> Add(<span class="kwrd">string</span> item)</pre>
<pre><span class="lnum">   6:  </span>            {</pre>
<pre><span class="lnum">   7:  </span>                <font color="#008080">Console</font>.WriteLine(item);</pre>
<pre><span class="lnum">   8:  </span>            }</pre>
<pre><span class="lnum">   9:  </span>&nbsp;</pre>
<pre><span class="lnum">  10:  </span>            <span class="rem">// Other ICollection&lt;T&gt; Members</span></pre>
<pre><span class="lnum">  11:  </span>        }</pre>
<pre><span class="lnum">  12:  </span>&nbsp;</pre>
<pre><span class="lnum">  13:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre>
<pre><span class="lnum">  14:  </span>        {</pre>
<pre><span class="lnum">  15:  </span>            <font color="#008080">StringCollection</font> strings = <span class="kwrd">new</span> <font color="#008080">StringCollection</font>() { <span class="str"><font color="#800040">"Van's"</font></span>, <span class="str"><font color="#800040">"Brog"</font></span>, <span class="str"><font color="#800040">"Vicky"</font></span> };</pre>
<pre><span class="lnum">  16:  </span>        }</pre>
<pre><span class="lnum">  17:  </span>    }</pre>
<p><font face="Trebuchet MS" size="2">　　在这个示例中，编译器会自动为strings对象调用Add方法，以将初始值列表中的所有元素加入到集合中，这里我们只是简单将初始值列表中的元素输出到控制台。<br />
</font></p>
<p><br />
<font face="Trebuchet MS" size="2">第六个特性：<strong>Lambda表达式</strong></font></p>
<p><font face="Trebuchet MS" size="2"><strong>　　</strong>C# 2.0中加入的匿名代理，简化了我们编写事件处理函数的工作，使我们不再需要单独声明一个函数来与事件绑定，只需要使用delegate关键字在线编写事件处理代码。</font></p>
<p><font face="Trebuchet MS" size="2">　　而C# 3.0则更进一步，通过<strong>Lambda表达式</strong>，我们可以一种更为简洁方式编写事件处理代码，新的Lambda事件处理代码看上去就像一个计算表达式，它使用<strong>"=&gt;"</strong>符号来连接事件参数和事件处理代码。我可以这样写：<font color="#ff0080" size="2">SomeEvent += 事件参数 =&gt; 事件处理代码;</font>下面是完整的示例：</font></p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span>    <span class="kwrd">delegate</span> T <font color="#008080">AddDelegate</font>&lt;T&gt;(T a, T b);</pre>
<pre><span class="lnum">   2:  </span>&nbsp;</pre>
<pre><span class="lnum">   3:  </span>    <span class="kwrd">class</span> <font color="#008080">LambdaExpression</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre>
<pre><span class="lnum">   4:  </span>    {</pre>
<pre><span class="lnum">   5:  </span>        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">event</span> <font color="#008080">EventHandler</font> MyEvent;</pre>
<pre><span class="lnum">   6:  </span>&nbsp;</pre>
<pre><span class="lnum">   7:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre>
<pre><span class="lnum">   8:  </span>        {</pre>
<pre><span class="lnum">   9:  </span>            MyEvent += <span class="kwrd">delegate</span>(<span class="kwrd">object</span> s, <font color="#008080">EventArgs</font> e)</pre>
<pre><span class="lnum">  10:  </span>            {</pre>
<pre><span class="lnum">  11:  </span>                <font color="#008080">Console</font>.WriteLine(s);</pre>
<pre><span class="lnum">  12:  </span>            };</pre>
<pre><span class="lnum">  13:  </span>&nbsp;</pre>
<pre><span class="lnum">  14:  </span>            MyEvent += (s, e) =&gt; { <font color="#008080">Console</font>.WriteLine(s); };</pre>
<pre><span class="lnum">  15:  </span>            </pre>
<pre><span class="lnum">  16:  </span>            MyEvent(<span class="kwrd">this</span>, <span class="kwrd">null</span>);</pre>
<pre><span class="lnum">  17:  </span>&nbsp;</pre>
<pre><span class="lnum">  18:  </span>            <font color="#008080">AddDelegate</font>&lt;<span class="kwrd">string</span>&gt; add = (a, b) =&gt; a + b;</pre>
<pre><span class="lnum">  19:  </span>&nbsp;</pre>
<pre><span class="lnum">  20:  </span>            <font color="#008080">Console</font>.WriteLine(add(<span class="str"><font color="#800040">"Lambda"</font></span>, <span class="str"><font color="#800040">"Expression"</font></span>));</pre>
<pre><span class="lnum">  21:  </span>        }</pre>
<pre><span class="lnum">  22:  </span>    }</pre>
</div>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p><font face="Trebuchet MS" size="2">　　在上面的例子中，分别使用了匿名代理和Lambda表达式来实现同样的功能，可以明显看出Lambda表达式的实现更为简洁。我们在使用Lambda表达式编写事件处理代码时，无需指明事件参数的类型，且返回值就是最后一条语句的执行结果。<br />
</font></p>
</div>
<p><br />
<font face="Trebuchet MS" size="2">第七个特性：<strong>扩展方法</strong></font></p>
<p><font face="Trebuchet MS" size="2"><strong>　　</strong>当我们需要对已有类的功能进行扩展时，我们通常会想到继承，继承已有类，然后为其加入新的行为。而C# 3.0中加入的<strong>扩展方法</strong>特性，则提供了另一种实现功能扩展的方式，我们可以在不使用继承的前提下实现对已有类本身的扩展，这种方法并不会产生新的类型，而是采用向已有类中加入新方法的方式来完成功能扩展。</font></p>
<p><font face="Trebuchet MS" size="2">　　在对已有类进行扩展时，我们需将所有扩展方法都写在一个静态类中，这个静态类就相当于存放扩展方法的容器，所有的扩展方法都可以写在这里面。而且扩展方法采用一种全新的声明方式：<font face="Trebuchet MS" color="#0000ff" size="2">public static</font> 返回类型 扩展方法名(<font color="#0000ff" size="2">this</font>&nbsp;<strong><font face="Trebuchet MS" color="#008080" size="2">要扩展的类型</font></strong> sourceObj<font color="#008080" size="2"> [,扩展方法参数列表]</font>)，与普通方法声明方式不同，扩展方法的第一个参数以<font color="#0000ff" size="2">this</font><font face="Trebuchet MS" color="#000000" size="2">关键字开始，后跟被扩展的类型名，然后才是真正的参数列表。下面是使用示例：</font></font></p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span>    <span class="kwrd">static</span> <span class="kwrd">class</span> <font color="#008080">Extensions</font></pre>
<pre><span class="lnum">   2:  </span>    {</pre>
<pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">int</span> ToInt32(<span class="kwrd">this</span> <span class="kwrd">string</span> source)</pre>
<pre><span class="lnum">   4:  </span>        {</pre>
<pre><span class="lnum">   5:  </span>            <span class="kwrd">return</span> <font color="#008080">Int32</font>.Parse(source);</pre>
<pre><span class="lnum">   6:  </span>        }</pre>
<pre><span class="lnum">   7:  </span>&nbsp;</pre>
<pre><span class="lnum">   8:  </span>        <span class="kwrd">public</span> <span class="kwrd">static</span> T[] Slice&lt;T&gt;(<span class="kwrd">this</span> T[] source, <span class="kwrd">int</span> index, <span class="kwrd">int</span> count)</pre>
<pre><span class="lnum">   9:  </span>        {</pre>
<pre><span class="lnum">  10:  </span>            <span class="kwrd">if</span> (index &lt; 0 || count &lt; 0 || index + count &gt; source.Length)</pre>
<pre><span class="lnum">  11:  </span>            {</pre>
<pre><span class="lnum">  12:  </span>                <span class="kwrd">throw</span> <span class="kwrd">new</span> ArgumentException();</pre>
<pre><span class="lnum">  13:  </span>            }</pre>
<pre><span class="lnum">  14:  </span>&nbsp;</pre>
<pre><span class="lnum">  15:  </span>            T[] result = <span class="kwrd">new</span> T[count];</pre>
<pre><span class="lnum">  16:  </span>            <font color="#008080">Array</font>.Copy(source, index, result, 0, count);    </pre>
<pre><span class="lnum">  17:  </span>            <span class="kwrd">return</span> result;</pre>
<pre><span class="lnum">  18:  </span>        }</pre>
<pre><span class="lnum">  19:  </span>    }</pre>
<pre><span class="lnum">  20:  </span>&nbsp;</pre>
<pre><span class="lnum">  21:  </span>    <span class="kwrd">class</span> <font color="#008080">ExtensionMethods</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre>
<pre><span class="lnum">  22:  </span>    {</pre>
<pre><span class="lnum">  23:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre>
<pre><span class="lnum">  24:  </span>        {</pre>
<pre><span class="lnum">  25:  </span>            <span class="kwrd">string</span> number = <span class="str"><font color="#800040">"123"</font></span>;</pre>
<pre><span class="lnum">  26:  </span>            <font color="#008080">Console</font>.WriteLine(number.ToInt32());</pre>
<pre><span class="lnum">  27:  </span>&nbsp;</pre>
<pre><span class="lnum">  28:  </span>            <span class="kwrd">int</span>[] intArray = <span class="kwrd">new</span> <span class="kwrd">int</span>[] { 1, 2, 3 };</pre>
<pre><span class="lnum">  29:  </span>&nbsp;</pre>
<pre><span class="lnum">  30:  </span>            intArray = intArray.Slice(1, 2);</pre>
<pre><span class="lnum">  31:  </span>&nbsp;</pre>
<pre><span class="lnum">  32:  </span>            <span class="kwrd">foreach</span> (var i <span class="kwrd">in</span> intArray)</pre>
<pre><span class="lnum">  33:  </span>                <font color="#008080">Console</font>.WriteLine(i);</pre>
<pre><span class="lnum">  34:  </span>        }</pre>
<pre><span class="lnum">  35:  </span>    }</pre>
</div>
<p><font face="Trebuchet MS" size="2">　　在上面的示例中，静态的Extensions类中有两个扩展方法，第一个方法是对string类的扩展，它为string类加入了名为ToInt32的方法，该方法没有参数，并返回一个int类型的值，它将完成数字字符向整数的转换。有了这个扩展方法之后，就可对任意string类的对象调用ToInt32方法了，该方法就像其本身定义的一样。</font></p>
<p><font face="Trebuchet MS" size="2">　　第二个扩展方法是一个范型方法，它是对所有数组类型的扩展，该方法完成数组的切片操作。</font></p>
<p><font face="Trebuchet MS" size="2">　　C# 3.0中的Linq表达式，就是大量运用扩展方法来实现数据查询的。</font></p>
<p><br />
<font face="Trebuchet MS" size="2">第八个特性：<strong>Linq查询表达式</strong></font></p>
<p><font face="Trebuchet MS" size="2">　　C# 3.0中加入的最为复杂的特性就是Linq查询表达式了，这使我们可直接采用类似于SQL的语法对集合进行查询，这就使我们可以享受到关系数据查询的强大功能。</font></p>
<p><font face="Trebuchet MS" size="2">　　Linq查询表达式是建立在多种C# 3.0的新特性之上的，这也是我为什么最后才介绍Linq的原因。下面看一个例子：</font></p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span>    <span class="kwrd">class</span> <font color="#008080">LinqExpression</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre>
<pre><span class="lnum">   2:  </span>    {</pre>
<pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre>
<pre><span class="lnum">   4:  </span>        {</pre>
<pre><span class="lnum">   5:  </span>            <span class="rem">// 定义匿名数组persons, 并为其赋初值</span></pre>
<pre><span class="lnum">   6:  </span>            <font color="#0000ff">var</font> persons = <span class="kwrd">new</span>[] {</pre>
<pre><span class="lnum">   7:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"Van's"</font></span>, Sex=<span class="kwrd">false</span>, Age=22 },</pre>
<pre><span class="lnum">   8:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"Martin"</font></span>, Sex=<span class="kwrd">true</span>, Age=30 },</pre>
<pre><span class="lnum">   9:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"Jerry"</font></span>, Sex=<span class="kwrd">false</span>, Age=24 },</pre>
<pre><span class="lnum">  10:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"Brog"</font></span>, Sex=<span class="kwrd">false</span>, Age=25 },</pre>
<pre><span class="lnum">  11:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"Vicky"</font></span>, Sex=<span class="kwrd">true</span>, Age=20 }</pre>
<pre><span class="lnum">  12:  </span>            };</pre>
<pre><span class="lnum">  13:  </span>&nbsp;</pre>
<pre><span class="lnum">  14:  </span>&nbsp;</pre>
<pre><span class="lnum">  15:  </span>            <span class="rem">/*</span></pre>
<pre><span class="lnum">  16:  </span><span class="rem">                执行简单Linq查询</span></pre>
<pre><span class="lnum">  17:  </span><span class="rem"> </span></pre>
<pre><span class="lnum">  18:  </span><span class="rem">                检索所有年龄在24岁以内的人</span></pre>
<pre><span class="lnum">  19:  </span><span class="rem">                查询结果放在results变量中</span></pre>
<pre><span class="lnum">  20:  </span></pre>
<pre><span class="lnum">  21:  </span><span class="rem">                results变量的类型与数组persons相同                </span></pre>
<pre><span class="lnum">  22:  </span><span class="rem">            */</span></pre>
<pre><span class="lnum">  23:  </span>            <font color="#0000ff">var</font> results = <font color="#0000ff">from</font> p <span class="kwrd">in</span> persons</pre>
<pre><span class="lnum">  24:  </span>                          <span class="kwrd">where</span> p.Age &lt;= 24</pre>
<pre><span class="lnum">  25:  </span>                          <font color="#0000ff">select</font> p;</pre>
<pre><span class="lnum">  26:  </span>&nbsp;</pre>
<pre><span class="lnum">  27:  </span>            <span class="kwrd">foreach</span> (<font color="#0000ff">var</font> person <span class="kwrd">in</span> results)</pre>
<pre><span class="lnum">  28:  </span>            {</pre>
<pre><span class="lnum">  29:  </span>                <font color="#008080">Console</font>.WriteLine(person.Name);</pre>
<pre><span class="lnum">  30:  </span>            }</pre>
<pre><span class="lnum">  31:  </span>&nbsp;</pre>
<pre><span class="lnum">  32:  </span>            <font color="#008080">Console</font>.WriteLine();</pre>
<pre><span class="lnum">  33:  </span>&nbsp;</pre>
<pre><span class="lnum">  34:  </span>&nbsp;</pre>
<pre><span class="lnum">  35:  </span>            <span class="rem">// 定义匿名数组customers, 并为其赋初值</span></pre>
<pre><span class="lnum">  36:  </span>            <span class="rem">// 该数组是匿名类型的</span></pre>
<pre><span class="lnum">  37:  </span>            <font color="#0000ff">var</font> customers = <span class="kwrd">new</span>[] {</pre>
<pre><span class="lnum">  38:  </span>                <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  39:  </span>                    Name=<span class="str"><font color="#800040">"Van's"</font></span>, City=<span class="str"><font color="#800040">"China"</font></span>, Orders=<span class="kwrd">new</span>[] {</pre>
<pre><span class="lnum">  40:  </span>                        <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  41:  </span>                            OrderNo=0,</pre>
<pre><span class="lnum">  42:  </span>                            OrderName=<span class="str"><font color="#800040">"C# Programming Language(Second Edition)"</font></span>,</pre>
<pre><span class="lnum">  43:  </span>                            OrderDate=<span class="kwrd">new</span> <font color="#008080">DateTime</font>(2007,9, 5)</pre>
<pre><span class="lnum">  44:  </span>                        },</pre>
<pre><span class="lnum">  45:  </span>                        <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  46:  </span>                            OrderNo=1,</pre>
<pre><span class="lnum">  47:  </span>                            OrderName=<span class="str"><font color="#800040">"Head First Design Patterns(Chinese Edition)"</font></span>,</pre>
<pre><span class="lnum">  48:  </span>                            OrderDate=<span class="kwrd">new</span> <font color="#008080">DateTime</font>(2007,9,15)</pre>
<pre><span class="lnum">  49:  </span>                        },</pre>
<pre><span class="lnum">  50:  </span>                        <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  51:  </span>                            OrderNo=2,</pre>
<pre><span class="lnum">  52:  </span>                            OrderName=<span class="str"><font color="#800040">"ASP.NET Unleashed 2.0(Chinese Edition)"</font></span>,</pre>
<pre><span class="lnum">  53:  </span>                            OrderDate=<span class="kwrd">new</span> <font color="#008080">DateTime</font>(2007,09,18)</pre>
<pre><span class="lnum">  54:  </span>                        },</pre>
<pre><span class="lnum">  55:  </span>                        <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  56:  </span>                            OrderNo=3,</pre>
<pre><span class="lnum">  57:  </span>                            OrderName=<span class="str"><font color="#800040">"The C++ Programming Langauge(Special Edition)"</font></span>,</pre>
<pre><span class="lnum">  58:  </span>                            OrderDate=<span class="kwrd">new</span> <font color="#008080">DateTime</font>(2002, 9, 20)</pre>
<pre><span class="lnum">  59:  </span>                        }</pre>
<pre><span class="lnum">  60:  </span>                    }</pre>
<pre><span class="lnum">  61:  </span>                },</pre>
<pre><span class="lnum">  62:  </span>                <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  63:  </span>                    Name=<span class="str"><font color="#800040">"Brog"</font></span>, City=<span class="str"><font color="#800040">"China"</font></span>, Orders=<span class="kwrd">new</span>[] {</pre>
<pre><span class="lnum">  64:  </span>                        <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  65:  </span>                            OrderNo=0,</pre>
<pre><span class="lnum">  66:  </span>                            OrderName=<span class="str"><font color="#800040">"C# Programming Language(Second Edition)"</font></span>,</pre>
<pre><span class="lnum">  67:  </span>                            OrderDate=<span class="kwrd">new</span> <font color="#008080">DateTime</font>(2007, 9, 15)</pre>
<pre><span class="lnum">  68:  </span>                        }</pre>
<pre><span class="lnum">  69:  </span>                    }</pre>
<pre><span class="lnum">  70:  </span>                },</pre>
<pre><span class="lnum">  71:  </span>                <span class="kwrd">new</span> {</pre>
<pre><span class="lnum">  72:  </span>                    Name=<span class="str"><font color="#800040">"Vicky"</font></span>, City=<span class="str"><font color="#800040">"London"</font></span>, Orders=<span class="kwrd">new</span>[] {</pre>
<pre><span class="lnum">  73:  </span>                        <span class="kwrd">new</span> { OrderNo=0,</pre>
<pre><span class="lnum">  74:  </span>                            OrderName=<span class="str"><font color="#800040">"C++ Programming Language(Special Edition)"</font></span>,</pre>
<pre><span class="lnum">  75:  </span>                            OrderDate=<span class="kwrd">new</span> <font color="#008080">DateTime</font>(2007, 9, 20)</pre>
<pre><span class="lnum">  76:  </span>                        }</pre>
<pre><span class="lnum">  77:  </span>                    }</pre>
<pre><span class="lnum">  78:  </span>                }</pre>
<pre><span class="lnum">  79:  </span>            };</pre>
<pre><span class="lnum">  80:  </span>&nbsp;</pre>
<pre><span class="lnum">  81:  </span>&nbsp;</pre>
<pre><span class="lnum">  82:  </span>            <span class="rem">/*</span></pre>
<pre><span class="lnum">  83:  </span><span class="rem">                执行多重Linq查询</span></pre>
<pre><span class="lnum">  84:  </span><span class="rem"> </span></pre>
<pre><span class="lnum">  85:  </span><span class="rem">                检索所在城市为中国, 且订单日期为2007年以后的所有记录</span></pre>
<pre><span class="lnum">  86:  </span><span class="rem">                查询结果是一个匿名类型的数组</span></pre>
<pre><span class="lnum">  87:  </span><span class="rem">                其中包含客户名, 订单号, 订单日期, 订单名四个字段</span></pre>
<pre><span class="lnum">  88:  </span><span class="rem">            */</span></pre>
<pre><span class="lnum">  89:  </span>            <font color="#0000ff">var</font> someCustomers = <font color="#0000ff">from</font> c <span class="kwrd">in</span> customers</pre>
<pre><span class="lnum">  90:  </span>                                <span class="kwrd">where</span> c.City == <span class="str">"China"</span></pre>
<pre><span class="lnum">  91:  </span>                                <font color="#0000ff">from</font> o <span class="kwrd">in</span> c.Orders</pre>
<pre><span class="lnum">  92:  </span>                                <span class="kwrd">where</span> o.OrderDate.Year &gt;= 2007</pre>
<pre><span class="lnum">  93:  </span>                                <font color="#0000ff">select</font> <span class="kwrd">new</span> { c.Name, o.OrderNo, o.OrderDate, o.OrderName };</pre>
<pre><span class="lnum">  94:  </span>&nbsp;</pre>
<pre><span class="lnum">  95:  </span>&nbsp;</pre>
<pre><span class="lnum">  96:  </span>            <span class="kwrd">foreach</span> (<font color="#0000ff">var</font> customer <span class="kwrd">in</span> someCustomers)</pre>
<pre><span class="lnum">  97:  </span>            {</pre>
<pre><span class="lnum">  98:  </span>                <font color="#008080">Console</font>.WriteLine(</pre>
<pre><span class="lnum">  99:  </span>                    customer.Name + <span class="str">", "</span> + customer.OrderName + <span class="str">",  "</span> +</pre>
<pre><span class="lnum"> 100:  </span>                    customer.OrderDate.ToString(<span class="str">"D"</span>)</pre>
<pre><span class="lnum"> 101:  </span>                );</pre>
<pre><span class="lnum"> 102:  </span>            }</pre>
<pre><span class="lnum"> 103:  </span>        }</pre>
<pre><span class="lnum"> 104:  </span>    }</pre>
<p><font face="Trebuchet MS" size="2">　　从上面的例子中，我们可以看到Linq查询的强大特性，它允许我们进行简单查询，或者进行更为复杂的多重连接查询。且查询的结果还可以是自定义的匿名类型。</font></p>
<p><font face="Trebuchet MS" size="2">　　以上是对C# 3.0中新增的八大特性的简要介绍，如果想了解更为深入的内容，可查看C# 3.0的官方规范。</font></p>
<p><font face="Trebuchet MS" size="2">&nbsp;</font></p>
<p><font face="Trebuchet MS" size="2">相关文章：</font><a href="http://www.cnblogs.com/JiaweiZONE/archive/2007/09/26/905992.html"><font face="Trebuchet MS">C#3.0 新特性速览(1)</font></a></p>
</div>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/910645.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42952/" target="_blank">[新闻]微型博客Twitter取消IM服务 称其ROI差</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>C#3.0 新特性速览(1)</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/26/905992.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Tue, 25 Sep 2007 16:59:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/26/905992.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/905992.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/26/905992.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/905992.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/905992.html</trackback:ping><description><![CDATA[<p><font size="2">　　微软最近的动作频繁，C#2.0规范才刚推出不久，我还没来的及完全消化C#2.0中的所有新特性，而今又推出了C#3.0，在短短几年中，微软就对C#进行了两次大的升级，为C#加入了许多新的特性，从而使C#变得更加强大也更加现代了。下面我就把C#3.0中的新特性的要点列出来，以供大家快速浏览。</font></p> <p><font size="2"><br>第一个特性：<strong>隐式类型化本地变量</strong></font></p> <p><font size="2">　　这个特性非常简单，有些JavaScript的影子，我们可以统一使用使用<strong>"var"</strong>关键字来声明局部变量，而不再需要指明变量的确切类型了，变量的确切类型可通过声明变量时的初始值推断出来。这样一来，可以大大简化我们声明局部变量的工作量了，下面是一个例子：</font></p> <div class="csharpcode"><pre><span class="lnum">   1:  </span>    <span class="kwrd">class</span> <font color="#008080">LocalVariables</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre><pre><span class="lnum">   2:  </span>    {</pre><pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre><pre><span class="lnum">   4:  </span>        {</pre><pre><span class="lnum">   5:  </span>            <font color="#0000ff">var</font> intValue = 5;</pre><pre><span class="lnum">   6:  </span>            <font color="#0000ff">var</font> stringValue = <span class="str"><font color="#800040">"This is a string"</font></span>;</pre><pre><span class="lnum">   7:  </span>            <font color="#0000ff">var</font> customClass = <span class="kwrd">new</span> <font color="#008080">LocalVariables</font>();</pre><pre><span class="lnum">   8:  </span>            <font color="#0000ff">var</font> intArray = <span class="kwrd">new</span> <span class="kwrd">int</span>[3] { 1, 2, 3 };</pre><pre><span class="lnum">   9:  </span>&nbsp;</pre><pre><span class="lnum">  10:  </span>            <span class="kwrd">foreach</span> (<font color="#0000ff">var</font> <span class="kwrd"><font color="#000000">value</font></span> <span class="kwrd">in</span> intArray)</pre><pre><span class="lnum">  11:  </span>                <font color="#008080">Console</font>.WriteLine(<font color="#000000"><span class="kwrd"><font color="#000000">value</font></span>);            </font></pre><pre><span class="lnum">  12:  </span>        }</pre><pre><span class="lnum">  13:  </span>    }</pre></div>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p><font size="2">上面的代码将被解析成：</font></p>
<div class="csharpcode"><pre><span class="lnum">   1:  </span>    <span class="kwrd">class</span> <font color="#008080">LocalVariables</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre><pre><span class="lnum">   2:  </span>    {</pre><pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre><pre><span class="lnum">   4:  </span>        {</pre><pre><span class="lnum">   5:  </span>            <span class="kwrd">int</span> intValue = 5;</pre><pre><span class="lnum">   6:  </span>            <span class="kwrd">string</span> stringValue = <span class="str"><font color="#800040">"This is a string"</font></span>;</pre><pre><span class="lnum">   7:  </span>            <font color="#008080">LocalVariables</font> customClass = <span class="kwrd">new</span> <font color="#008080">LocalVariables</font>();</pre><pre><span class="lnum">   8:  </span>            <span class="kwrd">int</span>[] intArray = <span class="kwrd">new</span> <span class="kwrd">int</span>[3];</pre><pre><span class="lnum">   9:  </span>&nbsp;</pre><pre><span class="lnum">  10:  </span>            <span class="kwrd">foreach</span> (<span class="kwrd">int</span> <span class="kwrd"><font color="#000000">value</font></span> <span class="kwrd">in</span> intArray)</pre><pre><span class="lnum">  11:  </span>                <font color="#008080">Console</font>.WriteLine(<span class="kwrd">value</span>);            </pre><pre><span class="lnum">  12:  </span>        }</pre><pre><span class="lnum">  13:  </span>    }</pre></div>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p><font size="2">　　要特别注意的是，由于变量的类型是通过变量初始值推断而来的，所以在声明变量的同时必需为变量指定初始值。并且，变量并不是没有类型的，变量一旦初始化之后，类型就确定下来了，以后就只能存储某种类型的值了，比如上面的stringValue的类型经推断为<font color="#0000ff">string</font>，所以该变量就只能保存<font color="#0000ff">string</font>类型的值了。</font></p>
<p><font size="2"><br>第二个特性：<strong>匿名类型</strong>&nbsp;</font></p>
<p><font size="2">　　有些时候我们需要临时保存一些运算的中间结果，特别是当这些中间结果是由多个部份组成时，我们常常会去声明一个新的类型，以方便保存这些中间结果。表面上看起来这很正常，而细想之后就会发现，这个新类型只服务于这个函数，其它地方都不会再使用它了，就为这一个函数而去定义一个新的类型，确实有些麻烦。</font></p>
<p><font size="2">　　现在，C#3.0中的<strong>匿名类型</strong>特性就可以很好的解决上面提到的问题，通过匿名类型，我们可以简单使用<font color="#0000ff">new</font><font color="#000000"> { <font color="#ff0080">属性名1=值1, 属性名2=值2, ..... , 属性名n=值n</font> }的形式直接在函数中创建新的类型，看下面这个例子：</font></font></p>
<div class="csharpcode"><pre><span class="lnum">   1:  </span>    <span class="kwrd">class</span> <font color="#008080">AnonymousType</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre></div>
<div class="csharpcode"><pre><span class="lnum">   2:  </span>    {</pre></div>
<div class="csharpcode"><pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre></div>
<div class="csharpcode"><pre><span class="lnum">   4:  </span>        {</pre></div>
<div class="csharpcode"><pre><span class="lnum">   5:  </span>            <font color="#0000ff">var</font> anonymousType1 = <span class="kwrd">new</span> {
<font color="#5f5f5f">   6:</font>                  CardNumber = <span class="str"><font color="#804040">"10001"</font></span>, Name = <span class="str"><font color="#804040">"van's"</font></span>, Sex = <span class="kwrd">true</span></pre><pre><span class="kwrd">   <font color="#5f5f5f">7:</font>              </span>};</pre></div>
<div class="csharpcode"><pre><span class="lnum">   8:  </span>&nbsp;</pre></div>
<div class="csharpcode"><pre><span class="lnum">   9:  </span>            <font color="#008080">Console</font>.WriteLine(anonymousType1.CardNumber);</pre></div>
<div class="csharpcode"><pre><span class="lnum">  10:  </span>            <font color="#008080">Console</font>.WriteLine(anonymousType1.Name);</pre></div>
<div class="csharpcode"><pre><span class="lnum">  11:  </span>&nbsp;</pre></div>
<div class="csharpcode"><pre><span class="lnum">  12:  </span>            <font color="#0000ff">var</font> anonymousType2 = <span class="kwrd">new</span> {</pre><pre>  <font color="#5f5f5f">13:</font>                  CardNumber = <span class="str"><font color="#804040">"10002"</font></span>, Name = <span class="str"><font color="#804040">"martin"</font></span>, Sex = <span class="kwrd">true</span></pre><pre><span class="kwrd">  <font color="#5f5f5f">14:</font>              </span>};</pre></div>
<div class="csharpcode"><pre><span class="lnum">  15:  </span>&nbsp;</pre></div>
<div class="csharpcode"><pre><span class="lnum">  16:  </span>            anonymousType2 = anonymousType1;</pre><pre>  <font color="#5f5f5f">17:</font>          }</pre><pre>  <font color="#5f5f5f">18:</font>      }</pre></div>
<p><font size="2">　　在新类型中只能有字段成员，而且这些字段的类型也是通过初值的类型推断出来的。如果在声明新的匿名类型时，新类型的字段名、顺序以及初始值的类型是一致的，那么将会产生相同的匿名类型，所以上例中anonymousType1和anonymousType2的类型是相同的，自然能进行anonymousType2=anonymousType1的赋值。</font></p>
<p><font size="2"><br>第三个特性：</font><a><strong><font color="#000000" size="2">隐式类型化数组</font></strong></a></p>
<p><font size="2">　　这个特性是对<strong>隐式类型化本地变量</strong>的扩展，有了这个特性，将使我们创建数组的工作变得简单。我们可以直接使用<strong>"new[]"</strong>关键字来声明数组，后面跟上数组的初始值列表。在这里，我们并没有直接指定数组的类型，数组的类型是由初始化列表推断出来的。</font></p>
<div class="csharpcode"><pre><span class="lnum">    1:  </span>    <span class="kwrd">class</span> <font color="#008080">AnonymousTypeArray</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre><pre><span class="lnum">   2:  </span>    {</pre><pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre><pre><span class="lnum">   4:  </span>        {</pre><pre><span class="lnum">   5:  </span>            <font color="#0000ff">var</font> intArray = <span class="kwrd">new</span>[] { 1, 2, 3, 4, 5 };</pre><pre><span class="lnum">   6:  </span>            <font color="#0000ff">var</font> doubleArray = <span class="kwrd">new</span>[] { 3.14, 1.414 };</pre><pre><span class="lnum">   7:  </span>            <font color="#0000ff">var</font> anonymousTypeArray = <span class="kwrd">new</span>[] {</pre><pre><span class="lnum">   8:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"van's"</font></span>, Sex=<span class="kwrd">false</span>, Arg=22 },</pre><pre><span class="lnum">   9:  </span>                <span class="kwrd">new</span> { Name=<span class="str"><font color="#800040">"martin"</font></span>, Sex=<span class="kwrd">true</span>, Arg=23 }</pre><pre><span class="lnum">  10:  </span>            };</pre><pre><span class="lnum">  11:  </span>&nbsp;</pre><pre><span class="lnum">  12:  </span>            <font color="#008080">Console</font>.WriteLine(intArray);</pre><pre><span class="lnum">  13:  </span>            <font color="#008080">Console</font>.WriteLine(doubleArray);</pre><pre><span class="lnum">  14:  </span>            <font color="#008080">Console</font>.WriteLine(anonymousTypeArray[0].Name);</pre><pre><span class="lnum">  15:  </span>        }</pre><pre><span class="lnum">  16:  </span>    }</pre>
<p>　　<font face="Trebuchet MS" size="2">上面的代码中，anonymousTypeArray变量的声明同时运用了隐式类型化数组和匿名类型两种特性，首先创建匿名类型，然后再初始值列表，推断出数组的确切类型。</font></p>
<p><font size="+0"><font size="2"><font face="Trebuchet MS"><br>第四个特性：<strong>对象构造者</strong></font></font></font></p>
<p><font face="Trebuchet MS" size="2">　　我们在声明数组时，可以同时对其进行初始化，这样就省去了很多麻烦，但是在创建类的对象时，这招可就不灵了，我们要么调用该类的构造函数完成对象的初始化，要么就手工进行初始化。这两种方法都不太方便，使用构造函数来对对象进行初始化时，我们为了某种灵活性，可能需要编写构造函数的多个重载版本，实在是麻烦。</font></p>
<p><font face="Trebuchet MS" size="2">　　C#3.0中加入的<strong>对象构造者</strong>特性，使得对象的初始化工作变得格外简单，我们可以采用类似于数组初始化的方式来初始化类的对象，方法就是直接在创建类对象的表达式后面跟上类成员的初始化代码。具体示例如下：</font></p></div>
<div class="csharpcode"><pre><span class="lnum">   1:  </span>   <span class="kwrd">class</span> <font color="#008080">Point</font></pre><pre><span class="lnum">   2:  </span>   {</pre><pre><span class="lnum">   3:  </span>        <span class="kwrd">public</span> <span class="kwrd">int</span> X { <font color="#0000ff">get</font>; <font color="#0000ff">set</font>; }</pre><pre><span class="lnum">   4:  </span>        <span class="kwrd">public</span> <span class="kwrd">int</span> Y { <font color="#0000ff">get</font>; <font color="#0000ff">set</font>; }</pre><pre><span class="lnum">   5:  </span>&nbsp;</pre><pre><span class="lnum">   6:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> ToString()</pre><pre><span class="lnum">   7:  </span>        {</pre><pre><span class="lnum">   8:  </span>            <span class="kwrd">return</span> <span class="str"><font color="#800040">"("</font></span> + X.ToString() + <span class="str"><font color="#800040">", "</font></span> + Y.ToString() + <span class="str"><font color="#800040">")"</font></span>;</pre><pre><span class="lnum">   9:  </span>        }</pre><pre><span class="lnum">  10:  </span>    }</pre><pre><span class="lnum">  11:  </span>&nbsp;</pre><pre><span class="lnum">  12:  </span>    <span class="kwrd">class</span> <font color="#008080">Rectangle</font></pre><pre><span class="lnum">  13:  </span>    {</pre><pre><span class="lnum">  14:  </span>        <span class="kwrd">public</span> <font color="#008080">Point</font> P1 { <font color="#0000ff">get</font>; <font color="#0000ff">set</font>; }</pre><pre><span class="lnum">  15:  </span>        <span class="kwrd">public</span> <font color="#008080">Point</font> P2 { <font color="#0000ff">get</font>; <font color="#0000ff">set</font>; }</pre><pre><span class="lnum">  16:  </span>&nbsp;</pre><pre><span class="lnum">  17:  </span>        <span class="kwrd">public</span> Rectangle()</pre><pre><span class="lnum">  18:  </span>        {</pre><pre><span class="lnum">  19:  </span>            P1 = <span class="kwrd">new</span> <font color="#008080">Point</font>();</pre><pre><span class="lnum">  20:  </span>            P2 = <span class="kwrd">new</span> <font color="#008080">Point</font>();</pre><pre><span class="lnum">  21:  </span>        }</pre><pre><span class="lnum">  22:  </span>&nbsp;</pre><pre><span class="lnum">  23:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> ToString()</pre><pre><span class="lnum">  24:  </span>        {</pre><pre><span class="lnum">  25:  </span>            <span class="kwrd">return</span> <span class="str"><font color="#800040">"P1: "</font></span> + P1 + <span class="str"><font color="#800040">", P2: "</font></span> + P2;</pre><pre><span class="lnum">  26:  </span>        }</pre><pre><span class="lnum">  27:  </span>    }</pre><pre><span class="lnum">  28:  </span>&nbsp;</pre><pre><span class="lnum">  29:  </span>    <span class="kwrd">class</span> <font color="#008080">ObjectBuilder</font> : AppRunner.<font color="#008080">AbstractApplication</font></pre><pre><span class="lnum">  30:  </span>    {</pre><pre><span class="lnum">  31:  </span>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Run()</pre><pre><span class="lnum">  32:  </span>        {</pre><pre><span class="lnum">  33:  </span>            <font color="#008080">Point</font> thePoint = <span class="kwrd">new</span> <font color="#008080">Point</font>() { X = 1, Y = 2 };</pre><pre><span class="lnum">  34:  </span>            <font color="#008080">Console</font>.WriteLine(<span class="str"><font color="#800040">"Point(X, Y) = {0}"</font></span>, thePoint);</pre><pre><span class="lnum">  35:  </span>&nbsp;</pre><pre><span class="lnum">  36:  </span>            <font color="#008080">Rectangle</font> theRectangle = <span class="kwrd">new</span> <font color="#008080">Rectangle</font>() { </pre><pre>  <font color="#5f5f5f">37:</font>                  P1 = { X = 1, Y = 1 }, P2 = { X = 100, Y = 200 } </pre><pre>  <font color="#5f5f5f">38:</font>              };</pre><pre><span class="lnum">  39:  </span>            <font color="#008080">Console</font>.WriteLine(theRectangle);</pre><pre><span class="lnum">  30:  </span>        }</pre><pre><span class="lnum">  41:  </span>    }</pre>
<p>　　<font face="Trebuchet MS" size="2">我们在定义Point类的X和Y属性时，只须写上该属性的get和set访问器声明，C#编译器会自动为我们生成默认的get和set操作代码，当我们需要定义简单属性时，这个特性非常有用。</font></p>
<p><font face="Trebuchet MS" size="2">　　我们以<font color="#0000ff">new</font> <font color="#008080">Point</font>() { X = 1, Y = 2 }语句，轻松的完成了对<font color="#008080">Point</font>类的初始化工作。在创建类的对象时，我们可以按照需要去初始化类的对象，只要在类的创建表达式后跟上要初始化属性的列表即可，且可以只对需要初始化的属性赋初值，而无需把所有属性的初始值都写上去。</font></p>
<p><font face="Trebuchet MS" size="2">　　在theRectangle对象的初始化表达式中，我们首先对P1属性进行初始化，然而P1属性也是一个自定义的类型，所以P1属性的初始化是另一个类型(Point)的初始化表达式，我们可以这样的方式来对更加复杂的类型进行初始化。<br><br><font face="Trebuchet MS" size="2">　　未完待续.........</font></font></p>
<p><font face="Trebuchet MS" size="2">相关文章：<a href="http://www.cnblogs.com/JiaweiZONE/archive/2007/09/29/910645.html">C#3.0 新特性速览(2)</a><br></p></font></div><img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/905992.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42951/" target="_blank">[新闻]用手机聊Gtalk的方法以及应用总结</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>终于拿到了《Head First设计模式》中文版</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/17/895259.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Sun, 16 Sep 2007 17:50:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/17/895259.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/895259.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/17/895259.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/895259.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/895259.html</trackback:ping><description><![CDATA[<p><font face="Arial" size="2">　　今天，终于拿到了《Head First设计模式》的简体中文版了！</font>  <p><font face="Arial" size="2">　　从得知有这么一本好书，到等待中文译本的出版，再到今天拿到这本书，一切都是那么的漫长。</font>  <p><font size="2"><font face="Arial">　　早在今年2月份，就从UMLChina上看到这样一条令我兴奋的消息，<strong><font color="#404040">Amazon书店头牌书：《Head First设计模式》大陆译本很快就要由中国电力出版社出版了。大陆译本由UMLChina在蔡学镛台湾译本基础上改编而成。</font></strong></font></font><strong> </strong> <p><font face="Arial" size="2">　　可这条消息过后，很长一段时间里，都没有再听到此书的简体中文译本的消息了，与UMLChina联系后才得知，这本书的简体中文译本早在年前就已交给中国电力出版社了，只是出版社那边一直没有消息，而中国电力出版社的官网也没有任何关于此书的消息，就好像根本就没这么一回事。</font>  <p><font face="Arial" size="2">　　直到今年9月，才在China-Pub上看到了这本书的中文译本，于是立刻订了一本，今天终于拿到手了！</font>  <p><font face="Arial" size="2"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/HeadFirst_1AEC/clip_image0022.jpg" target="_blank" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="660" alt="clip_image0022" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/HeadFirst_1AEC/clip_image0022_thumb.jpg" width="600" border="0"></a></font>  <p><font face="Arial" size="2">　　这是一本讲叙设计模式的经典巨著，该书获得了2005年第15届Jolt震撼大奖，由此可见这本书的权威性了。</font>  <p><font face="Arial" size="2">　　O'REILLY公司的Head First系列图书的特点是，图文并茂，内容生动有趣，有相当高的可读性，《Head First设计模式》当然也不例外，就连《设计模式》的作者之一Erich Gamma都这样说：“我昨天收到这本书，在回家的路上开始读，简直欲罢不能，<strong><font color="#404040">于是我把书带到健身房，我一边运动，一边阅读，脸上堆满笑容。</font></strong>这真是太酷了！不但有趣、涵盖许多基础知识、而且观点正确，真的让我印象深刻。”</font>  <p><font face="Arial" size="2"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/HeadFirst_1AEC/clip_image0041.jpg" target="_blank" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="282" alt="clip_image0041" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/HeadFirst_1AEC/clip_image0041_thumb.jpg" width="650" border="0"></a><br>我又多了一本经典图书</font></p> <p><font face="Arial" size="2">　　在翻阅《Head First设计模式》的出版信息时，发现这本书的英文版早在2004年就已经出版，而简体中文译本到现在才出版，整整晚了三年。要知道，软件业的发展是如此之快，而我们现在看的却还是别人三年前写的东西 :(</font>  <p><span style="font-family: wingdings"><font face="Arial" size="2"></font></span></p><img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/895259.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42950/" target="_blank">[新闻]Google开拓美政府机构市场 微软业务受冲击</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>我的读书感悟</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/12/891054.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Wed, 12 Sep 2007 10:40:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/12/891054.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/891054.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/09/12/891054.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/891054.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/891054.html</trackback:ping><description><![CDATA[<p><font size="2">　　我是2002年开始学的C++，当时的学习资料是由C++的发明者Bjarne Stroustrup所著的《C++程序设计语言（中文特别版）》，所以在权威性上，这本书是其它任何同类书籍所无法比拟的，有了读这本书的经历后，让我明白了这样一个道理：选一本好书会使我们少走很多弯路。也就是因为这本书，真正把我带进了程序设计的殿堂。</font></p> <p><font size="2">　　在紧接的2004年我又学起了Java，而学习资料是《Java编程思想（第3版）》，个人感觉该书可以当作学习Java语言的标准教材，内容深入浅出，同样非常权威，而深度和广度就更不用说了。现在这本书已经出到了第4版，主要是加入了对Java 5的新特性介绍。</font></p> <p><font size="2">　　在这之后，我又开始研究设计模式，其实这纯属巧合，一次在图书馆里找书的时候，无意间发现了一本《敏捷软件开发－原则、模式与实践》，感觉名字比较特别，就翻了几页，看到这本书的排版和印刷都很漂亮，就借了回去。我当时对什么是敏捷软件开发根本就一无所知，看了这本书之后，才知道什么是敏捷软件开发，什么是XP，什么是设计模式，以及什么是面向对象的设计原则。这本书使我真正了解了什么是面向对象，如何使用面向对象的方式构建出"美"的软件，我也很欣赏作者在书中对软件之美所作出的诠释！让我明白：软件开发也是一门艺术，就像是艺术家创作出美的东西一样，软件开发也同样可以创造出美的东西来，只要足够用心！</font></p> <p><font size="2">　　而到了2005年，由于.NET越来流行，我又开始学起了C#，而由于当时并没有找到一本像《C++程序设计语言》或《Java编程思想》这样权威的教材，所以干脆就拿微软的C#语言规范作为教材，糊里糊涂的学了起来，所以学的很不系统也很不全面。</font></p> <p><font size="2">　　参加工作后，由于教学的需要，要为软件开发班的学生选一本C#的教材，找了半天，最终选中了《C#入门经典（第3版）》，理由是比较适合作为入门教材（主要是比较简单），但这本书的内容不够深入。</font></p> <p><font size="2">　　为什么就没有一本于C#的权威教材呢？难道没人关心C#吗？</font></p> <p><font size="2">　　直到2007年的8月，我才发现了由电子工业出版社引进的一本名为《C#编程语言（第2版）》的C#教程，作者是C#语言的构架师Anders Hejlsberg和C#设计团队的成员，所以在权威性方面应该是没得说的。</font></p> <p><font size="2">　　用C#已经一段时间了，在.NET平台上也用C#写过一些项目，但却从来没有像使用C++或Java那样的知根知底的感觉，没安全感，所以觉得还应该再系统的学习一遍，以对C#有个比较全面而深入的了解，为了提高兴趣，特意买了本英文版的，这样也可以锻炼自己的英文阅读能力。（其实主要是因为买这本书的时候并没有出中文版，中文版是最近才出的）</font></p> <p><font size="2">　　随后，我又看了《ASP.NET揭密（第2版）》，感觉这本书写的很全面，且作者笔风流畅，看起来也很流畅。应该算是ASP.NET的标准教材吧。</font></p> <p><font size="2">　　我看过的书还有《Visual C++.NET 技术内幕（第6版）》（VC的权威参考书）、《Windows图形编程》（美籍华人的经典著作）、《Professional JavaScript™ for Web Developers（英文版）》（是我看过是讲解JavaScript最全面的一本书了）、《UML2 工具箱》、《重构－改善即有代码的设计》（重构方面的巨著）、《人件》（学会怎样和老板及同事相处）、《JOEL说软件》（软件业的经典小品类书籍）、《代码大全》（讲叙软件开发的方方面面，所有程序员必备的参考书）、《使用Ant进行Java开发》（写的很好，看起来很流畅，是学习自动化构建的权威参考书）、《Ajax in Action》、《.NET设计规范》、《CSS禅意花园》（可以很好的纠正我们滥用HTML标记的坏习惯，并学习如何去创造美的东西）、《Spring专业开发指南》（学习Spring的权威教材）、《Hibernate Quickly》、《Programming Ruby》（时下流行的Ruby语言的权威参考书）、《单元测试之道－C#版》、《80x86汇编语言程序设计》（呵呵，可以了解计算机的工作原理）、《MS-DOS 6.22》（这是我的第一本计算机类图书，这本书完整的介绍了MS-DOS的方方面面）、《数据结构与算法:C++版》（翻的不太好，像是盗版的）</font></p> <p><font size="2">&nbsp;</font></p> <p><font size="2">　　有了读这些书经历，使得我对软件开发有了比较全面的了解，以及对计算机学科体系的总体认识，在遇到问题时，总能运用所学知识找到解决方案，也正是因为这些书，使我越来越热爱这个行业，并立志要在这个行业中干出一番事业来。</font></p><img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/891054.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42949/" target="_blank">[新闻]消息称苹果正在开发iTunes网络电视</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>我的本本</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/08/12/852720.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Sun, 12 Aug 2007 10:24:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/08/12/852720.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/852720.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/08/12/852720.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/852720.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/852720.html</trackback:ping><description><![CDATA[<p><font size="2">　　记得在大学时，我在物质上的最大愿望，就是拥有一台属于自己的本本，可是家人并不赞同我的想法，说笔记本太容易被偷，而且也太娇贵。可我不死心，硬是找来大堆理由来与家人理论，经过和家人的一番思想斗争后，得出的结论是同意给我买一台旧本本，这样丢了也就不心疼了。</font></p>
<p><font size="2">　　就这样，我便有了大学时的第一台本本，一台二手的HITACHI（日立）12寸银白色本本，是2005年1月份买的，当时花了2200，配置偏低，不过用它写写程序上上网，还是不成问题的。虽然是二手本本，但我还是爱如珍宝，小心翼翼的使用着。天天搂着它，吃饭睡觉都不离身，室友们开玩笑的说，这台本本就像我的小老婆一样。</font></p>
<p><font size="2">　　可好景不长，还没到一年，本本就出事了，本本的屏幕在一次意外中被我给压破了，屏幕中出现了一道长长的裂痕，没法正常使用了，拿去找人修，维修的人说得换块屏幕，而且换屏花的钱和再买一台差不多。听到这番话后，我的心就像被针给扎了，不知道有多难受。回到学校后，室友竟然发现我的头上多了根白头发。</font></p>
<p><font size="2">　　后来，家人又给我弄了台本本，也是旧的，而且年代久远，是1998年产的NEC的10寸本本，配置很低，CPU是奔腾MMX的，频率只有266MHz，内存96MB，硬盘只有3G，如果在1998年，这台本本肯定很值钱，可是在2006年，这本本只能用来听听歌，连上个QQ都很慢，根本没法用，不过我也没什么可说的，谁叫我当初没好好爱护好之前的那台本本呢，也只能这样将就着用了，等以后自己能赚钱了，再买台好的。</font></p>
<p><font size="2">　　如今，我已经工作一年多了，已有能力为自己买一台好本本，所以就开始在网上选本本了。</font></p>
<p><font size="2">　　一开始，我看中了HP Compaq的V3323TU，当时的报价为7600块，我之所以会看中这款，主要是因为它的外观，纯黑色机身，再加上是钢琴烤漆的，外观十分靓丽，而且就7600块的价格而言，性价比应该也是很高的。</font></p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/127563-34.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="424" alt="127563-34" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/127563-34_thumb.jpg" width="640" border="0" /></font></a><font size="2">&nbsp;<br />
HP Compaq V3323TU</font></p>
<p><font size="2">　　而在配置方面，这款机器的CPU是Intel Core T5300，频率为1.73GHz，FSB只有533MHz，1G DDRII 667MHz的内存，5400转的80G硬盘，COMBO光驱，10/100M网卡，内置Intel PRO 3945A/B/G无线网卡，就这样的配置，对于我应该是够用的。</font></p>
<p><font size="2">　　我原本打算就买这款了，可突然想起一个之前从没有考虑过的问题，这本本耐不耐用？因为之前有了一次本本屏幕被压破的经历，所以这次买本本一定要注意这个问题，于是上网查了查，结果发现，IBM的本本比较耐用，而IBM的本本都很贵，大部份IBM的本本都在1万块钱以上，差不多可以买两台HP Compaq的本本了。</font></p>
<p><font size="2">　　为什么IBM的本本就这么贵呢？它贵在哪呢？为了弄清楚这些问题，我又上网查了大量IBM本本的资料，后来才发现IBM本本和其它本本的不同之处，就我个人认为，最具吸引力的应该是下面这几个特性：</font></p>
<p><font size="2">　　1. IBM的本本的顶盖采用的是铝镁合金材料，所以非常坚固，可以很好的保护液晶显示屏。（这是我最看中的地方）<br />
　　2. IBM的本本特有APS硬盘保护技术，可以有郊的减少振动对硬盘的伤害。<br />
　　3. IBM的本本特有镁制防滚架，可以有郊减少外部冲击对机内部件的伤害。<br />
　　4. IBM的本本特有的三级散热系统，可以有郊控制机身的温度。</font></p>
<p><font size="2">　　就是因为有了这些特性，IBM的本本才能卖到这么贵。经过一番思想斗争后，我还是说服了自己，决定选择IBM的本本，因为IBM本本的这些特性太吸引我了，特别是它的铝镁合金材料的顶盖，这样我就不用担心本本屏幕再被压坏了。</font></p>
<p><font size="2">　　竟然已经下定决心选择IBM的本本了，那么下一步就是去选择具体型号了，到IBM的卖场后，我第一个看中的就是一款宽屏的本本，因为宽屏本本看电影很爽，而且宽屏本本的可视面积也比普屏本本高出20%，后来看了看型号，得知这款的型号为<strong>ThinkPad z61t 9441MK5</strong>，而且配置方面我也很满意，这款机器的CPU是Intel Core 2 T5600，频率为1.83GHz，FSB为667MHz，512 DDRII 667MHz的内存， 5400转的80G硬盘，COMBO光驱，10/100/1000M网卡，内置Intel PRO 3945A/B/G无线网卡，内置蓝牙，内置红外，内置30万像素摄像头。</font></p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/131043_1.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="131043" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/131043_thumb_1.jpg" width="612" border="0" /></font></a><font size="2"> <br />
ThinkPad z61t 9441MK5</font></p>
<p><font size="2">　　我是和一个朋友一起去买的，我不太会还价，所以还价的工作就由他一个人负责了，经过一伦伦舌战后，最后还到12000块，带票，而且还加了块512MB的内存，当时的日期为2007年5月25日。</font></p>
<p><font size="2">　　机器买回去后，我立刻装了Windows Vista，系统运行起来还算流畅，得到了3.1分，因为没有独立显卡，所以系统的瓶颈在于3D商务和游戏图形性能。</font></p>
<p><font size="2">&nbsp;</font><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/%E6%96%B0%E5%9B%BE%E7%89%87.png" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="新图片" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/%E6%96%B0%E5%9B%BE%E7%89%87_thumb.png" width="640" border="0" /></font></a><font size="2"> <br />
Vista系统评分</font></p>
<p><font size="2">&nbsp;</font></p>
<p><font size="2">　　本本已经用了快两个月了，总体感觉很好，下面总结一下我个人对这款本本的看法：</font></p>
<p><font size="2">　　1. 键盘的手感很好，基本上和台式机差不多。<br />
　　2. 本本很小巧，不像是14寸的本本，可能是宽屏的缘故吧，显得小，而且厚度控制的也很好，重量只有2.1公斤。<br />
　　3. 屏幕效果还可以，而且宽屏也可以显示更多的内容。但可惜不是镜面的，容易脏。<br />
　　4. 音响效果不错，特别是中音部分表现的很好，可惜就是音量小了点。</font></p>
<p><font size="2">&nbsp;</font></p>
<p><font size="2">　　我要特别指出的是，想要流畅运行Windows Vista的话，内存至少要配1G，但是想要在Vista上运行一些大型软件的话，如Visual Studio、Photoshop，那么就要配2G的内存了，因为光是Vista就要用掉600MB~800MB的内存，所以想要在Vista上流畅的工作的话，1G的内存是不够用的。</font></p>
<p><font size="2">&nbsp;</font></p>
<p><font size="2">　　最后贴几张我自己拍的本本的照片。</font></p>
<table cellspacing="0" cellpadding="2" width="400" border="0" unselectable="on">
    <tbody>
        <tr>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00005.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00005" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00005_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00006.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00006" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00006_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
        </tr>
        <tr>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00007.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00007" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00007_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00008.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00008" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00008_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
        </tr>
        <tr>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00009.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00009" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00009_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00010.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00010" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00010_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
        </tr>
        <tr>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00011.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00011" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00011_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00012.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00012" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00012_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
        </tr>
        <tr>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00013_1.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00013" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00013_thumb_1.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00014.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00014" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00014_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
        </tr>
        <tr>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00015.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00015" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00015_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
            <td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00018.jpg" target="_blank" atomicselection="true"><font color="#000000" size="2"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="PIC00018" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/0ecd888202ab_1FD1/PIC00018_thumb.jpg" width="240" border="0" /></font></a><font size="2"> </font></td>
        </tr>
    </tbody>
</table>
<p><font size="2">&nbsp;</font></p>
 <img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/852720.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42948/" target="_blank">[新闻]微软周一开电话会议 预计将发布Silverlight2.0</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Windows Live Writer 测试</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/07/27/833552.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Fri, 27 Jul 2007 05:02:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/07/27/833552.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/833552.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/07/27/833552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/833552.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/833552.html</trackback:ping><description><![CDATA[<div class="csharpcode"><pre><span class="lnum"><font face="宋体" size="2"><br>刚装上了Windows Live Writer，现发篇文章测试一下。</font></span></pre><pre><span class="lnum"></span>&nbsp;</pre><pre><span class="lnum">Code test</span></pre><pre><span class="lnum">   1:  </span><span class="kwrd">using</span> System;</pre><pre><span class="lnum">   2:  </span>&nbsp;</pre><pre><span class="lnum">   3:  </span><span class="kwrd">class</span> Program</pre><pre><span class="lnum">   4:  </span>{</pre><pre><span class="lnum">   5:  </span>    <span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)</pre><pre><span class="lnum">   6:  </span>    {</pre><pre><span class="lnum">   7:  </span>        Console.WriteLine(<span class="str">"Hello world from C#!"</span>);</pre><pre><span class="lnum">   8:  </span>    }</pre><pre><span class="lnum">   9:  </span>}</pre><pre>&nbsp;</pre><pre>&nbsp;</pre><pre>Text test</pre><pre>Normal, <strong>Bold, </strong><em>Italic, </em>Underline</pre><pre>&nbsp;</pre><pre>&nbsp;</pre><pre>Blockquote test</pre>
<blockquote><pre>This is a text</pre></blockquote><pre>&nbsp;</pre><pre>Image test</pre><pre><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/WindowsLiveWriterTestPost_B723/IMG0654A.jpg" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="IMG0654A" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/WindowsLiveWriterTestPost_B723/IMG0654A_thumb.jpg" width="325" border="0"></a> </pre><pre>&nbsp;</pre><pre>Link test</pre><pre><a href="http://www.jiaweizone.cn" target="_blank">My Blog Address</a></pre></div>
<p>&nbsp;</p>
<p><font face="Consolas" size="3">Table test</font> 
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
</p>
<table cellspacing="0" cellpadding="2" width="400" border="0" unselectable="on">
<tbody>
<tr>
<td valign="top" width="200">Tab1</td>
<td valign="top" width="200">Tab2</td></tr>
<tr>
<td align="right" width="200">
<p align="right">&nbsp;in table image-&gt;</p></td>
<td valign="top" width="200"><a href="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/WindowsLiveWriterTestPost_B723/IMG0655A.jpg" atomicselection="true"><img height="180" alt="IMG0655A" src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/WindowsLiveWriterTestPost_B723/IMG0655A_thumb.jpg" width="240" border="0"></a></td></tr>
<tr>
<td valign="top" width="200">Tab3</td>
<td valign="top" width="200">Tab4</td></tr></tbody></table>
<p>&nbsp;</p>
<p><font face="con" size="3">Map test</font></p>
<p></p>
<div class="wlWriterSmartContent" id="84E294D0-71C9-4bd0-A0FE-95764E0368D9:fccf49e4-054d-4118-802c-44c2a7687f12" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 403px; padding-top: 0px"><a href="http://maps.live.com/default.aspx?v=2&amp;cp=39.9131~116.3888&amp;lvl=10&amp;style=r" id="map-710b1435-02ad-4d79-abd9-be4dd6a5906d" alt="Click to view this map on Live.com" title="Click to view this map on Live.com"><img src="http://www.cnblogs.com/images/cnblogs_com/JiaweiZONE/WindowsLiveWriter/WindowsLiveWriterTestPost_B723/map-0959f8da9576.jpg" width="403" height="249"></a><br><label for="map-710b1435-02ad-4d79-abd9-be4dd6a5906d" style="font-size:.8em;">Bejing Map</label></div> <img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/833552.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42947/" target="_blank">[新闻]开心网即将启用”shejiao.com”?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>基于AJAX技术的Web会议平台</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/07/23/827739.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Sun, 22 Jul 2007 19:08:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/07/23/827739.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/827739.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/07/23/827739.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/827739.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/827739.html</trackback:ping><description><![CDATA[<p style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; 前段时间，用AJAX+VML写了一个Web在线会议平台，觉得挺有意思的，现在把它拿上来与大家分享 ^_^</p>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 这是一个类似于NetMeeting的在线会议平台，但特别之处在于，WebMeeting不需要安装额外的软件，只要有IE就能使用，这样一来，使用者只要能够上网，就能进行在线会议。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; WebMeeting还只是一个概念，目前只有电子白板和即时消息发送的功能。WebMeeting的界面是仿flickr风格的，所以非常简洁。如下图所示：<br />
</p>
<div style="font-size: 10pt" align="left"><img height="371" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jiaweizone/Skin5.png" width="505" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebMeeting的界面&nbsp;<br />
</div>
&nbsp;
<p style="font-size: 10pt" align="left"><strong>功能介绍：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 电子白板：可多人同时进行白板操作，且每个人都可以看到操作过程。<br />
&nbsp; &nbsp;&nbsp; 在线交流：可进行简单的消息发送。</p>
<p style="font-size: 10pt" align="left"><br />
<strong>使用方法：</strong><br />
&nbsp;&nbsp; &nbsp; 使用者只要在浏览器中输入WebMeeting所在的WEB服务器地址，就能进行Web在线会议了，多人可同时使用白板绘制图形，发送文本消息，而这些动作都将会反映在每个使用者的屏幕上，如下图所示：<br />
</p>
<div style="font-size: 10pt" align="left"><img height="189" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jiaweizone/Skin6.png" width="615" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 用户A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户B</div>
<div style="font-size: 10pt" align="left">&nbsp;<br />
<strong><br />
WebMeeting的工作原理：</strong></div>
<div style="font-size: 10pt" align="left">&nbsp; &nbsp;&nbsp; WebMeeting是用AJAX+VML实现的，VML是作为表示层用来进行白板的绘制，故WebMeeting目前只能在IE上运行，而用户操作的反馈则是通过AJAX进行传递的。</div>
<p style="font-size: 10pt" align="left"><img height="276" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jiaweizone/Skin7.png" width="647" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统运行流程图&nbsp;</p>
<div style="font-size: 10pt" align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常情况下，使用AJAX可实现浏览器端与服务器端的异步通信，特别是有了AjaxPro.NET后，更可以非常方便的以同步或异步的方式去调用服务器端的方法，但由于WebMeeting即需要从浏览器端异步调用服务器端方法来完成动作的反馈(即浏览器端把用户的动作发送到服务器)，且服务器又需要完成用户动作的分发(即服务器接收到用户的反馈后把动作分发到各浏览器端)，也就是说，需要双向的AJAX调用：浏览器端调用服务器端的函数以及服务器端调用浏览器端的函数。</div>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 要从浏览器端调用服务器端的方法，AjaxPro.NET可很好的应付，可以利用JavaScript轻松的调用服务器端方法，但是反过来，若想从服务器端调用浏览器端的方法的话，就不是那么容易了，因为AjaxPro.NET并没有提供这个功能。</p>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 从本质上讲，B/S结构的应用程序天生就是无状态的，所以就没有办法从服务器端直接调用浏览器端的方法，因为所有请求都是单方向的，只能从浏览器端向服务器发出请求。</p>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 为了使服务器调用浏览器端方法成为可能，可以采用控制反转的方法，可按照如下步骤进行：<br />
&nbsp;&nbsp; &nbsp; a)&nbsp;&nbsp; 当从服务器端调用浏览器端方法时，并不真正的去调用浏览器端方法，而是把调用信息暂时保存在服务器端的&#8220;调用信息&#8221;队列中。<br />
&nbsp;&nbsp; &nbsp; b)&nbsp;&nbsp; 在浏览器端安排一个&#8220;查询进程&#8221;，让它每隔一段时间调用服务器端的&#8220;调用查询&#8221;函数，该函数会从服务器端的&#8220;调用信息&#8221;队列中提取出一条调用信息，然后作为返回值返回给浏览器端的&#8220;查询进程&#8221;。<br />
&nbsp;&nbsp; &nbsp; c)&nbsp;&nbsp; 浏览器端&#8220;查询进程&#8221;分析服务器端返回的查询结果，然后代理服务器端调用，最后把浏览器端方法执行的结果传回给服务器端&#8220;调用进程&#8221;。</p>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 这样一来，就可以非常方便的从服务器端调用浏览器端的方法，就像下面这样：<br />
</p>
<p style="font-size: 10pt" align="left"></p>
<div style="font-size: 10pt" align="left">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Page&nbsp;为浏览器端方法调用器的启动页面</span><span style="color: #008000"><br />
</span><span style="color: #000000">ClientSideMethodCaller&nbsp;caller&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClientSideMethodCaller(Page);<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;clientMethodName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器端方法名<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;param1,param2,&#8230;&#8230;&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用参数<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;returnValueReader&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回值阅读器</span><span style="color: #008000"><br />
</span><span style="color: #000000">caller.Call(&#8220;clientMethodName&#8221;,&nbsp;param1,&nbsp;param2,&nbsp;&#8230;&#8230;&#8230;,&nbsp;returnValueReader);<br />
</span></div>
</div>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 以上就是对WebMeeting的完整介绍，可能有点长，但希望能给想写这类应用的朋友带来一些灵感。</p>
<p style="font-size: 10pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; 另附上WebMeeting的源代码及说明文档：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; <a title="WebMeeting下载" href="http://www.cnblogs.com/Files/JiaweiZONE/WebMeeting.rar">WebMeeting下载</a><br />
&nbsp;&nbsp;&nbsp;&nbsp; <a title="WebMeeting说明文档" href="http://www.cnblogs.com/Files/JiaweiZONE/WebMeeting_Introduce.doc">WebMeeting说明文档</a><br />
<br />
</p>
 <img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/827739.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42945/" target="_blank">[新闻]Google股价跌破329美元 61%员工期权价值归零</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Flickr版博客</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/04/20/721445.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Fri, 20 Apr 2007 10:52:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/04/20/721445.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/721445.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/04/20/721445.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/721445.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/721445.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; 看到我的Blog，有没有让你联想到Flickr的界面？如果还有些感觉，那么我的幸苦总算是没有白费 ^_^</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; 自从用过Flickr之后，我就开始喜欢上像Flickr这样简洁明了的界面风格了，给人一种非常干净的感觉，这可能就是所谓的Web2.0的网络应用风格吧。<br>&nbsp;&nbsp;&nbsp;&nbsp; 于是突发奇想，打算把我的Blog也改造成Flickr风格的，也沾一点Flickr的光。经过一潘折腾，把主色调改成了蓝色＋红色，再加上淡灰色的左导航栏。呵呵，有点Flickr的意思了吧！<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 这里还要特别感谢博客园的设计者，使得界面风格的改动变得如此的简单了。</p>
 <img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/721445.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42944/" target="_blank">[新闻]十年祭:昔日明星软件今何在?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>敏捷软件开发方法系列文章</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/04/14/Agile_Software_Development.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Sat, 14 Apr 2007 10:29:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/04/14/Agile_Software_Development.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/713489.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/04/14/Agile_Software_Development.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/713489.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/713489.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;学习敏捷软件开发方法已经有一段时间了，也试验性的应用该方法写过一些小的程序，有了一些自己对该方法的理解，但一直没有写过关于这方面的文章，最近由于教学的需要，要准备一份关于敏捷软件开发方法的完整资料，这次正好借此机会，把我在应用敏捷方法过程中的心得体会，写成系列文章，一来是为了与大家分享，再者也好把它整理成完整的文档，方便教学。</p>
<p style="FONT-SIZE: 10pt"><br>在该系列文章中，我主要会写以下几方面的内容：</p>
<p style="FONT-SIZE: 10pt"><strong><a href="http://www.cnblogs.com/JiaweiZONE/admin/EditArticles.aspx#"><strong>一、什么是敏捷软件开发方法<br></strong></a></strong>&nbsp;&nbsp; &nbsp; 作为开遍，这里主要是对敏捷软件开发方法的综合性介绍，对敏捷软件开发方法的一系列组成部的概要性说明。</p>
<p style="FONT-SIZE: 10pt"><strong><a href="http://www.cnblogs.com/JiaweiZONE/admin/EditArticles.aspx#"><strong>二、测试驱动开发<br></strong></a></strong>&nbsp;&nbsp;&nbsp; &nbsp;在这里，主要介绍什么是测试驱动开发，以及说明为什么需要这种编写代码的方式，并与传统编码方式做了一些比较。</p>
<p style="FONT-SIZE: 10pt"><a href="http://www.cnblogs.com/JiaweiZONE/admin/EditArticles.aspx#"><strong>三、结对编程</strong><br></a>&nbsp;&nbsp;&nbsp; &nbsp;结对编程，是一种全新的团队协作方法，软件的每部分都是在两个人的协作下完成的，在这里，对结对编程做了一个系统的介绍，并讨论了这种方法与传统方法的不同之处。</p>
<p style="FONT-SIZE: 10pt"><strong><a href="http://www.cnblogs.com/JiaweiZONE/admin/EditArticles.aspx#"><strong>四、重构<br></strong></a></strong>&nbsp;&nbsp; &nbsp; 重构是敏捷软件开发方法中用来改善即有代码质量的手段，通过一系列的方法，能够在不改变系统外在行为的前提下改善代码的质量。由于重构的内容很多，我在里只会简单的介绍一些重构的最基本手法。</p>
<p style="FONT-SIZE: 10pt"><strong><a href="http://www.cnblogs.com/JiaweiZONE/admin/EditArticles.aspx#" EditArticles.aspx#? admin JiaweiZONE www.cnblogs.com http:><strong>六、应用案例<br></strong></a></strong>&nbsp;&nbsp;&nbsp;&nbsp; 这里主要向大家展示采用敏捷软件开发方法完成的几个小的案例，我会尽量真实的还原当时的场景，给大家一个对敏捷软件开发方法的完整体验。</p>
<p style="FONT-SIZE: 10pt"><br>&nbsp;&nbsp;&nbsp; &nbsp;最后，由于本人水平有限，如果文章有什么不得当的地方，欢迎大家指正。<br></p>
<img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/713489.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42943/" target="_blank">[新闻]六大可能出售IT企业名单：SUN领头或被猎走</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[转载] Java剑 VS .NET刀 -- 东山再起(论模式)(二)</title><link>http://www.cnblogs.com/JiaweiZONE/archive/2007/01/04/611593.html</link><dc:creator>van‘s</dc:creator><author>van‘s</author><pubDate>Thu, 04 Jan 2007 09:14:00 GMT</pubDate><guid>http://www.cnblogs.com/JiaweiZONE/archive/2007/01/04/611593.html</guid><wfw:comment>http://www.cnblogs.com/JiaweiZONE/comments/611593.html</wfw:comment><comments>http://www.cnblogs.com/JiaweiZONE/archive/2007/01/04/611593.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/JiaweiZONE/comments/commentRss/611593.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/JiaweiZONE/services/trackbacks/611593.html</trackback:ping><description><![CDATA[摘要:        京城,振威镖局,镖局的废墟上..天空晴朗,白云朵朵,然而镖局废墟上空似乎有无尽的悲哀..<br><br>       约1500人,清一色是浅黄色武士装,腰挎刀,手牵VS杀手犬的彪形大汉,阵形甚是整齐..本该是豪情壮志的汉子,但是此刻,每个人脸上都隐约可见泪痕,如此英雄好汉,能让他们掉眼泪,必定是遇到了极大的伤心事和挫折..领头一人,双目泪光闪烁,脸色苍白,双拳紧握,牙关紧咬,仰面向天,片刻后,对着西边凤鸣山大喊道:"我丁一刀,如不报此仇,誓不为人!",此声悲壮,伤心,义愤之情也感染了在场的众好汉,大家齐声道:&nbsp;&nbsp;<a href='http://www.cnblogs.com/JiaweiZONE/archive/2007/01/04/611593.html'>阅读全文</a><img src ="http://www.cnblogs.com/JiaweiZONE/aggbug/611593.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42942/" target="_blank">[新闻]Linux内核2.6.27正式到来</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>