CSharp3.0锐利初体验(一)

 
装了VS2008 beta 2 ,今天小爽了一把CSharp3.0,总的感受就是微软帮程序员又分担了很多负担,编译器的编写者试着将程序员的一些冗余工作交给编译器去完成,程序员写起代码来更加顺畅。从语言的角度来讲,C#的抽象程度越来越高了。

下面这个程序包含了一部分C#3.0的新特征:

  1using System;
  2
  3using System.Collections.Generic;
  4
  5using System.Text;
  6
  7using System.Threading;
  8
  9 
 10
 11namespace CSharp3
 12
 13{
 14
 15    class Program
 16
 17    {
 18
 19        static void Main(string[] args)
 20
 21        {
 22
 23            //扩展方法
 24
 25            string s = "aa2ss";
 26
 27            s.ExMethod();
 28
 29 
 30
 31            //对象初始化器
 32
 33            //对象初始化器的出现,减少了冗余代码
 34
 35            //直接在实例化类的同时就初始化了字段,但是这跟构造函数是不同的
 36
 37            myPoint my = new myPoint { X = 0, Y = 1 };
 38
 39            Console.WriteLine("X of my =" + my.X.ToString());
 40
 41            Console.ReadKey();
 42
 43 
 44
 45            //匿名类型
 46
 47            //编译器会根据属性来推断相应的类型
 48
 49            //有var的地方就有推断
 50
 51            Console.Clear();
 52
 53            var p1 = new { X = 32, Y = 45 };
 54
 55            Console.WriteLine(
 56
 57"p1 is :{0},and p1.X={1}" ,
 58
 59p1.GetType().ToString(),p1.X);
 60
 61            Console.ReadKey();
 62
 63 
 64
 65            //Lambda表达式 
 66
 67            Console.Clear();
 68
 69            LambdaClass.testLambda1();
 70
 71            Console.WriteLine("********************");
 72
 73            LambdaClass.testLambda2();
 74
 75            Console.ReadKey();
 76
 77        }

 78
 79 
 80
 81    }

 82
 83 
 84
 85    /// <summary>
 86
 87    /// 扩展方法
 88
 89    /// </summary>

 90
 91    public static class Extensions
 92
 93    {
 94
 95        /// <summary>
 96
 97        /// 扩展方法实际上提供了一种给已定义类添加或者追加方法的方便途径
 98
 99        /// 这里this关键字是个标示符,this后面的类型定义了要给哪个类追加方法
100
101        /// </summary>
102
103        /// <param name="s"></param>

104
105        public static void ExMethod(this string s)
106
107        {
108
109            Console.WriteLine("This is a Extension Method!!");
110
111            Console.ReadKey();
112
113            Console.Clear();
114
115        }

116
117    }

118
119 
120
121    /// <summary>
122
123    /// 对象初始化器例子
124
125    /// </summary>

126
127    public class myPoint
128
129    {
130
131        int x, y;
132
133 
134
135        public int Y
136
137        {
138
139            get return y; }
140
141            set { y = value; }
142
143        }

144
145        public int X
146
147        {
148
149            get return x; }
150
151            set { x = value; }
152
153        }

154
155    }

156
157 
158
159    # region Lambda Expressions
160
161 
162
163   public delegate int myDelegate(int a,int b);
164
165 
166
167    /// <summary>
168
169   /// Lambda表达式本身是一个委托类型
170
171    /// </summary>

172
173    public class LambdaClass
174
175    {
176
177        public static void myMethod(myDelegate myDele)
178
179        {
180
181          Console.WriteLine(
182
183"Let's have a see what was represented by the delegate:\n{0}",
184
185              myDele.Method.ToString());
186
187          Console.WriteLine("the result of culculating between 8 & 8 is :");
188
189          Console.WriteLine(myDele.Invoke(88));
190
191        }

192
193 
194
195        /// <summary>
196
197        /// 甚至无须声明参数类型,因为编译器会在匹配的委托里找到它们的类型
198
199        /// </summary>

200
201        public static void testLambda1()
202
203        {
204
205            LambdaClass.myMethod((x,y) =>x*y);
206
207        }

208
209 
210
211        /// <summary>
212
213        /// 很自然的方式,可以替代匿名方法,或者作为一个匿名的委托
214
215        /// </summary>

216
217        public static void testLambda2()
218
219        {
220
221            Thread t = new Thread(() =>
222
223                {
224
225                        Console.WriteLine("This is a Lambda Expression!");
226
227                }
);
228
229            t.Start();           
230
231        }

232
233    }

234
235    #endregion
236
237}

238
239

 的确写得比较爽,体现了“以人文本”的思想. 编译器似乎是程序员的一个朋友,为程序员分担了很多工作,编译器会经常猜到程序员写的是什么,当然前提是你写的程序为编译器的推断提供了充分合理的理由。我想这也是一个趋势吧,让程序员coding时更惬意,更自然,更像一样开发,而不是处处要迎合机器的思维.恩,也许不久以后CSharp会像word一样普及的,期待中...

posted on 2007-09-26 08:43  J.D Huang  阅读(602)  评论(0编辑  收藏

统计