Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2012-08-01) C#入门学习体验

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

为了向图形图像转型,我这些天开始学习C#。学习C#的主要原因有以下几点:

  1. 有unsafe关键字,有指针,可自己管理内存,从而提高性能。在铁哥的测试中,使用unsafe写出来的算法,是c/c++同等程序的75%左右,相当不错2. 对图形图像支持比较好,比如wpf的卖点之一,就是提供新的图形图像api,不再依赖于GDI/GDI+,而是Direct3D,利用硬件优势3. c#语言本身特性丰富,可快速实现UI4. .net库也很丰富,快速实现非核心功能5. 很多硬件只支持windows,所以在windows平台下开发,当然也得选择对windows支持最好的语言6. 有铁哥的成功经验!

因为我是从Java转过来的,对于MS语言总有种天然的不习惯。但在考查过其它的一些语言之后,觉得还是C#优势最大,所以只能硬着头皮上了。

人们都说C#和Java很像,从Java转到C#会比较容易,一开始我也是这么想的。没想到C#的入门远比预想中的困难,主要有以下原因:

经过近一个星期的时间,现在处于半入门的阶段,成果是用C#+WPF做出了一个简单的GUI程序:QQ群聊天记录合并工具。之前用scala做过,这次主要是用它来熟悉常用API和类库。说是半入门,是因为只用到了C#和WPF最基本的功能,Visual C#的IDE会用了,算不上真正的入门。与上周学习Flex相比,难度大很多。

飞速发展的C

作为有多年经验的Java开发者,我对C#真是羡慕嫉妒恨。Java这些年,在语言层面几乎没有进步,连最基本的多行文本和闭包(或者再简化一点:lambda)都迟迟没有提供。一个闭包搞了六七年还没出来,还能让人说什么呢。而C#在3.0时,就具备了明年发布的Java8的特性,而4.0/5.0还有很多吸引人的新特性,比如LINQ和await/defer。相比Java的爬行,C#开着跑车。在学习C#时,想着当年Java的辉煌,心情郁闷。

C#在语法风格上,与Java相差很多,甚至是一大障碍。比如方法名首字母大写!大括号另起一行!!无时无刻让我在做心里斗争。首字母大写这没办法,好在代码格式化中,可以让括号不起新行,算是舒服了一些。

C#中的新特性很多,我只是先简单浏览了一下,还没有详细看,也没有在代码中运用。感觉有一大堆东西要学。

可使用免费的Visual C# 2010 express来开发,功能强大,中途会提醒注册,免费注册后就可一直使用。

WPF

我最开始想用WinForm来入门,它有点像Java中的Swing,使用代码方式来写GUI程序。后来发现了WPF,看了一下,决定用它:

  1. 对图形图像方面支持比WinForm好2. 与Flex相似的方式开发(xaml画界面,c#写逻辑),比较适合我口味3. 与SilverLight相似,可用来开发跨浏览器/平台的富客户端程序

WPF在数据绑定上不太好用,与Flex相比差太远了,我在写代码时,宁愿在C#中绑定,也不愿意在xaml中写。这里可参考铁哥中的相关文章:WPF/Silverlight的数据绑定设计的真糟糕

但总体来说,它还是.net中最适合我需求的东西,所以先学习它。有一本很好的书推荐,叫《深入浅出WPF》,绝对是WPF入门首选,可自行搜索下载,或买本支持作者。

Visual C#快捷键

从eclipse转来使用Visual C#,觉得十分不方便。特别是以前习惯的那些快捷键,现在都不能用了。

下载这份快捷键手册,很有用。

我常用的一些快捷键:

一些想用但还没找到的:

一些资源

写到这里居然觉得没什么可写的了,只好以一些资源作为结束。相比Java程序员,.Net有某些方面真是太幸福了。各种详细的API和文章,在msdn上应有尽有,中文、详细、权威。

我最开始按Java的经验到处到处找资源、找代码,费力不讨好。最后发现只要上msdn基本就够了。这里推荐一些有用的:

一些常用碎页

comments powered by Disqus