冒号和他的学生们(连载19)——平台语言 - 编程入门网
听听微软对Java的批判——虽然可能过激,但一般也不会太离谱。此法同样适用于包括C#在内的其他语言。”
句号有所感慨:“这既是程序员之幸——语言之间可以互相取长补短,共同进步;也是程序员之不幸——往往不得不在众多语言中作艰难选择,或者多花精力学更多的语言。” 冒号一边点头一边接着说:“下面继续看看Java与C#的共性。借着刚才的话题,我们来看看C#与Java是如何互相学习的。” 冒号和他的学生们(连载19)——平台语言(2)时间:2011-07-01 BlogJava 郑晖引号举手插问:“C#到底更接近C++还是Java?” “这是个有趣的问题。不妨这么说:C#看起来像C++,用起来像Java。C#借鉴了包括Java、C++、Delphi等在内的语言特征,其中Java的影响最大,但由于微软与Sun在Visual J++上的过节,宁愿强调与C++的关系而淡化与Java的关系。C#的设计者Hejlsberg以前是Delphi和Visual J++的架构师,在一次访谈中首先声明C#不是Java的克隆,但从此话本身和他本人的背景都暗示了与Java千丝万缕的联系。例如,C#采用了大量与Java相同或相似功用却不同拼写的关键词。”冒号投影出一张表格——
“这只是Java与C#关键词的不完全对照表。中立地看,C#的关键词更简明,但避嫌的意义似乎大过改进的意义。那么C#究竟从Java那里学到了什么,相比于C++又有什么优势呢?”冒号切换了幻灯片—— 更加安全——限用或禁用指针;检查字符串和数组的边界;增加类型安全;禁用未初始化的变量;增加了对资源的安全管理; 更加简单——自动垃圾回收;废除了头文件和宏(macro);支持接口(interface);废除多继承以及非公开继承;摒弃了C++中一些生僻、难用的语法; 更加OO——不支持全局变量和自由函数;所有的类都可上溯到Object类;对象一般通过new分配在堆(heap)上; 更加丰富——支持自省(Reflection);支持线程;提供图形界面、网络编程等API; 更加标准——对Unicode的内建支持;支持注释性文档;类或方法可以被废弃(deprecated); 更加中性——编译成机器无关代码;运行于统一平台; 问号顺势而问:“Java向C#又借鉴了什么呢?” 冒号答道:“在Java1.5的增强特征中,有不少C#的影子。如增强版的for循环;可变长参数(varargs);自动装箱(autoboxing);类型安全的枚举(typesafe enum)等等。此外,支持元数据的的注释(annotation)与C#的特性(attribute)大同小异,C#从Delphi中引入的属性(property)也出现在Java 7的提案中。” 叹号双手一摊:“这么多相同之处,不如合并算了。” “很傻很天真的想法。等它们合并了,估计世界也大同了。”冒号笑言,“它们之间的差别也不容忽视。C#重新捡起了C++中被Java抛弃的一些特征,可谓是对C++的否定之否定——除了支持引用类型(reference type)外,还支持值类型(value type);除了按值传递(pass-by-value)外,还可按引用传递(pass-by-reference);支持操作符重载(ope |
||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |