是从 C 和 C++ 中派生出来的,因此具有 C++ 的功能,它又同 VB 一样简单。对于 web 开发 而言, C# 象 Java ,同时具有 Delphi 的一些优点。 Microso" name="description" />
C# MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是从C和C++ 中派生出来的,因此具有C++的功能,它又同 VB一样简单。对于web开发而言,C#象 Java,同时具有Delphi的一些优点。Microsoft“号称”C#是开发.NET框架应用程序的最好语言,它的前景如何,让我们拭目以待。
C#闪亮登场。
先来看C#从Java里“盗用”了什么。C#比Java产生的晚,这为它的盗用创造了“天时”,所以C#可以站了Java这个前人的肩膀上。C#为什么“盗用”Java的技术呢?当然盗用的那一部分都是Java超出原先C++的地方(当然,这一部分对C++造成了巨大的市场冲击),Microsoft又一次采取了“拿来主义”的手法,很好地利用了Java 的众多特性,隆重推出了Windows平台的C#这一新锐力量,实在是高明,C#的登场无疑是“闪亮”的。这些“盗用”包括:两者都摈弃了C++中函数及其参数的const修饰,宏代换,全局变量和全局函数等许多华而不实的地方,指针没了,另外也不需要自己释放内存了,这将减少平常出错的50%。当去掉指针和增加垃圾回收机制之后,奇迹就会发生,bug的出现量就注定会大大地减少,内存泄露也不会发生了。另外,英明神武的C#学会了Java的单根机制,也实现了“all are objects”了,抛弃了原先C++的多根机制和类之间的多重继承,因为那两个东东实在是太讨厌了,搞的许多类在一起象个“网”一样。现在好了,统统地都是object的儿子或者孙子或者孙子的儿子的儿子的儿子了┈┈,大家都姓object了,object统一天下了。但是我不能不让你“多重继承”,所以好,我引入“接口”这个概念,我不让你直接“连网”,我搞出个东东跟你们都联系起来,跟你们接口,行使“通讯员”的功能,不然的话,为了实现多重继承你这个类就可能有不只一个老爸。C#不忍心看着老一辈“指针崇拜者”掉眼泪,并没有彻底地抛弃指针,C#允许我们在unsafe上下文中进行指针操作。
乖乖,怎么样使代码平台无关呢?Java引入了一个编译代码中间层,叫做字节代码,并使用一个虚拟抽象的机器,而不是一个真实的机器。当Java编译器结束了一个源文件的编译后,所得到的不是可以立即在一个给定平台上运行的代码,而是可以在任何真实的平台上运行的字节代码,唯一的条件就是这个平台要理解和支持Java。而C#,当编译源代码为.exe文件后,启动.exe时,CLR 将提取编译器写入代码中的重要元数据。接着,一个叫做 Just-In-Time 编译器的模块将代码映射到特定的 CPU中,开始实际的执行过程。这无疑也高明地盗用了Java虚拟机的概念。但是,Java是平台无关的而C#在很大程度上只适合Windows操作系统,C#在跨平台方面似乎更热衷于XML Web Services互操作,而不是跨平台编程。
当在c/c++定义a[10]这个数组时,元素a[10]甚至a[100]这个非法访问它不会提示错误,但是你已经不知道a[100]跑到哪里去了(悟空啊,我早就告诉过你,不要乱扔东西嘛,砸到小朋友了就不好了,就是没有砸到小朋友,砸到花花草草的也不好啊),你这样的操作a[100]=1是十分危险的一个动作。数组的索引越界检查,类型安全在Java中被提到了相当的高度,a[10]一旦出现,不客气,你错了,我抛出异常,我绝不姑息你,因为姑息就会养奸。C#学到了这一套了,而且更加厉害了,在异常处理方面,不管从内置支持,还是从执行效率来讲,C#都较Java略胜一筹了。