C#的三大难点之前传:什么时候应该使用C#?
C#的三大难点之一:byte、string与StringBuilder
C#的三大难点之二:托管与非托管
C#的三大难点之三:消息与事件
PS:后两篇等我找到了工作再写(╯‵□′)╯︵┻━┻
什么时候应该使用C#?
如果我把题目起成:C#比Java好在哪里,或者是C#比C++好在哪里,估计又会引发一轮大撕逼。不过这样没有任何意义。
语言最终只是实现目的的工具。使用那种语言,最终还要看具体的要求,以及你对哪种环境更熟悉。
但是,在某种情况下,我仍然更推荐C#语言。
这种情况就是,当你开发只基于windows平台的客户端的时候。
另外,似乎当你开发基于windows server的服务端程序时,C#也是一个很好的选择,不过我没怎么搞过服务端,就不做深入讨论了。
为什么开发windows平台的客户端的时候要考虑选择C#?在我看来,至少有以下几点理由:
1、可以使用全宇宙最好用的IDE:Visual Studio
要说哪种语言是全宇宙最好的语言,肯定还会争论不休;但要说哪个IDE是全宇宙最好的IDE,我想应该争论不大了。抱着微软亲爹的大腿,Visual Studio的易用性,要远远超越其它IDE。
2、不需要额外安装运行环境
类似JAVA的运行需要JRE环境,windows下C#的运行也需要.net framework运行环境。但是,你并不需要在每一台需要运行C#的电脑上安装一遍——windows7已经自带了.net framework 3.5, windows8已经自带了.net framework 4。你只需要选择合适的framework版本,即可直接在用户的电脑上运行,与编译型语言相比,用户感受不到任何差别。
前两个优点很简单,也很容易理解,这里不再细说。稍微休息一下,后面的两个优点,内容就比较多了。
好了,由于下面两个特点更为复杂,我会辅以图片或代码作为例证。
3、编写UI界面,C#的代码更为干净。
为了说明这一点。我们用MFC的界面开发和C#的界面开发做一下对比。
首先,简单科普一下什么是MFC:MFC也是Visual Studio提供的,可以用来做界面开发的一种方案。编程语言使用C++。早些时候,使用MFC方案的客户端比较多,现在已经很少看到有人使用了。
首先,我们试着用MFC新建一个默认的UI程序
首先是让人眼花缭乱的各种选项:
后面还有更多的选项,让你选择是否包含菜单栏等等,我就不一一贴上来了。,有兴趣的同学可以自己新建一个项目试试。
然后是建立项目之后默认生成的文件列表:
我新建的是“单个文档”,如果上面的选项中选择“基于对话框”的话,文件列表会更简单一些。
但在MFC中,这样一个单个文档的程序,被分为文档(doc)和视图(view)两个部分,再加上框架(frame),复杂的结构着实难道了不少人。
当我初次接触MFC时,我的反应是:卧槽,写个客户端怎么这么难?当个码农不容易啊!
当然,现在我也觉得当个码农不容易,不过已经不是难在这种地方了。
顺便,我再问一个问题:程序的main()函数入口在哪呢?
这是MainFrm.cpp包含的内容,你能猜出来程序启动的过程中,依次执行了哪些函数吗?
当年为了讲清楚这个问题,还专门有一本书:《深入浅出MFC》。当年写客户端,似乎真的不是那么容易的一件事情。
好在这些痛苦的事情都成为了过去,如今我除了在一些工业控制公司见到老的客户端程序仍然使用MFC做维护,大部分客户端都不再使用这一技术了。
下面,我们再用C#新建一个客户端程序。
首先,C#新建时已经不需要勾选复杂的选项了,直接就可以新建好项目。
看看C#的文件列表,是不是清爽了很多?
我们再看看Program.cs和Form1.cs中的代码:
我顺便再问你,main()函数在哪里,你会答不上来吗?
与MFC相比,是不是觉得很干净,有没有觉得人生还是很美好的?
4、C#的写法更为随意。
我们先看这样一个例子:
class Test
{
public string TestString { get; set; }
}
对直接写个get和set的写法是不是很陌生?实际上,上面的写法等效于:
class Test
{
private string _string;
public string TestString {
get { return _seconds; }
set { _seconds = value; }
}
}
那么,为什么不直接用
class Test
{
prublic string TestString;
}
呢?
再看另一个例子:
delegate int del(int i);
static void Main(string[] args)
{
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
}
“=>”的用法是不是也很陌生?
这个用法叫Lambda。
再看这个:
var result = from c in Customers
where c.City == "Boston"
orderby c.LastName descending
select new { c.FirstName, c.LastName, c.Address };
这中类似SQL的用法叫LINQ。
这么多奇怪的用法,有没有一种眼花缭乱的感觉?C#的另一个特性就在于,写法非常随意,你可以用很短的语句表达出完整的效果,但这个特性的缺点就在于,对于新手而言,初次读一段C#代码,可能会失去读C或者JAVA的那种熟悉感。
你愿意学习这些新特性吗?不愿意学习的话,传统的写法也可以达到同样的效果,你愿不愿意守着过去的那些规矩呢?
总结
如果你只开发基于Windows平台的客户端程序,我建议你考虑选择C#作为开发语言。
与C++,JAVA不同,Visual Studio更为好用,且不需要在Windows平台安装额外的运行环境。此外,C#的界面代码更为干净,写法也更为随意。
最后再补充一点。如果你还是在校学生的话,选择C#编程还需要一层考虑:校招中,C#的岗位是极少的。尤其是国内大的互联网公司,基本上以C和JAVA为主。使用C#编程的经验对找工作没有什么太大的帮助。
在你使用C#之前,请谨慎对上述弊端进行权衡!