编 辑 新 闻
新闻类型:
编程天地
编程天地
摄影天地
海贝官方
文学
电脑技术
创业天地
旅游天地
健康生活
游戏动漫
法律法规
商品欣赏
汽车世界
净化工程
asp.net
JQ与JS
APP
asp.net
系统
数据库
UI
JAVA
新闻主题:
 
搜索
 
前台
商品编号:
发 表 人:
关键字:
用空格隔开
新闻内容:
(小于1200字时 <br 分页)
<p><br/><br/></p><p style="text-indent: 2em;">对于C#,coder中可以分为2类:一类是C#死忠,对它赞赏到极点;另一类刚好相反,对它极度排斥。<br/><br/>本文将以全面、客观的方式评价这门语言,特别是语法方面。<br/><br/> <br/><br/>其实很多人评价一门语言是带着一种感情色彩的。有些人支持C#是因为他只会C#,或者因为他是微软的老用户。但更多的人支持C#,是因为他通过比较发现C#确实比其它语言做的好的多。如果将C#和C++,java比较。多个事实证明,在语法上C#确实比C++和Java做的好。下文将会详细分析好在哪。如果将C#和python, js之类的语言做比较,则会发现C#非常繁琐,还无法真正跨平台。所以很多人觉得C#不是优秀的语言。这是不对的,因为C#和python做的事情是不一样的,将它们进行比较毫无意义。就像电子邮件和短信进行比较----毫无疑问,短信更方便使用----但它们的功能不一样,不能仅仅因为短信更方便就完全否定电子邮件。<br/><br/> <br/>C#优点1: 相比java,有更先进的语法体系<br/><br/>由于C#是后生,所以其很多语法都是其它语言的改进。作为一个商业产品,C++用户是C#的首要目标,所以它充分照顾到了C++用户的习惯。从整体看,C#语法比java更优雅。这里java粉丝就可能会站出来,说java也有好的地方----对的,我没说C#在任何地方都优于java,请不要举出局部上的反例----C#和java比较的文章比比皆是,这里就不再重复了。<br/><br/>C#团队在设计语法时充分照顾到了常见的业务需求,而不是单纯的技术层面上的纸上谈兵。于是,C#支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。<br/>C# 优点2:强大的周边<br/><br/>C#的IDE功能非常强大,C#的文档有包含中文的多国语言,C#所需要的运行平台在用户量极大的windows上内置。一切的一切都在向我们诉说,C#有一个强大的爹。同时也说明,C#不仅仅是一个语言,更是一个极具匠心的产品。所以,用户可以享受到这个产品的各个功能----包括售后服务。<br/><br/>以上2个优点就是C#的全部优点了。我想任何一个C#粉丝想证明C#优秀,无外乎上面两个理由。下面让我们更来研究它的缺点。<br/><br/> <br/>C#缺点1:它是一个产品<br/><br/>作为微软的产品,它不能帮助竞争者----其它操作系统。作为微软的产品,它必须追求稳定、严谨,而不要出现任何错误。<br/><br/>C#团队实力确实非常强大,导致C#不会出现任何一个低级错误,就连 if(a = false) 这样的代码都会出现一个警告。C#的语法、底层库也无时不刻在印证一个理念:我们做的是产品,我们必须保证产品根据我们所期望的工作,而不允许出现任何错误。<br/><br/>这是一个优点,也是一个缺点。<br/><br/>当我们的需求和产品设计者所期望的一致时,事情会变的非常轻松。但如果需求和期望不同时,麻烦事情会接踵而至。 举个例子,当我们希望switch能够贯穿case时,就会出现麻烦----产品设计者不允许用户直接这么做----虽然他有合适的理由,也提供了实现这个功能的替代方法,但用户必须按他说的做。如果这种情况发生在其它产品设计者未考虑到的需求时,那么这个麻烦将会更大。比如当我们想要重载>>来模拟C++代码时,就会发现这是一个不可能的任务。<br/><br/>很多人都有这种感受,直接使用IDE自带的功能开发,做起来非常轻松。但一旦有一种自主的想法时,就很难实现----比如修改软件主题。<br/><br/> <br/>C#缺点2:没有考虑代码量<br/><br/>这种问题之所以会出现,是因为微软人多----人家不在乎。在C#中,文档注释需求书写xml,但是文档注释却是不能继承的----用户必须手动为每个函数和重载添加注释。C#的很多常用的工具类因为其使用的局限性(如菜鸟用了就会出错)而不被公开。典型的例子如下:<br/>复制代码<br/><br/>public string GetValue(int index) {<br/> if(index < 0) throw new ArgumentOutOfromRangeException();<br/> if(index > this.Count) throw new ArgumentOutOfromRangeException();<br/> return GetValueInternal(index);<br/>}<br/><br/>internal string GetValueInternal(int index) {<br/> //...<br/>}<br/><br/>复制代码<br/><br/>C#把用户当成傻子----GetValue 会传递一个非法的index,然后自己则使用更高效的GetValueInternal 。C#系统库的设计通过对 index 检测,来确保抛出的是一个符合意义的异常。<br/><br/>那用户怎么办?如果在项目中,不检测 index 是否合法,则显得不严谨,代码质量低(不检查 index,会导致 index 错误时将出现 IndexOfRangeException,而不是 ArgumentOutOfRangeException,这会让第三方用户迷惑:到底应该捕获哪个异常)。而检测则是在浪费代码量,一个函数尚且如此,一个项目可见一斑。<br/><br/>此外,用户经常需要使用一个类来实现功能,但其实这个类在系统库中是存在的,但由于它只是一个内部使用的功能模块所以不是 public 。这时用户只好另起炉灶。这也不难解释为了明明有 Buffer.Copy 这个方法,系统内部却只会调用 Buffer.CopyInternal(不是public的) 而不是 Buffer.Copy ,而 Buffer.CopyInternal 却是用户真正所需要的函数。<br/><br/> <br/><br/>总体看,C#不适合做项目。它是一个很大的坑,因为它会通过各种方式消耗用户的时间。特别是追求完美的人,想要紧跟微软的节奏创造完美,那简直是在拿时间开玩笑。而对于仅仅想做完项目的人,也会越做越烦:明明简单的事情要搞这么复杂。<br/><br/>即使如此,C#终究也只是一个语言,一个工具。客观评价一个工具的好坏没有实际意义,关键看用户能否熟练使用,并且扬长避短。没有最好的语言,但有最适合自己的语言。<br/><br/></p>
操作:
跳过导航链接。
净化工程
洁净室
汽车世界
安全常识
汽车养护
品牌欣赏
商品欣赏
商品评测
高逼格
商品对比
法律法规
法律法规
民生政策
游戏动漫
动漫天地
游戏欣赏
Flash游戏
健康生活
杂文
职务分类
便民服务
影视天地
教育
生活常识
饮食文化
偏方药方
养生之道
圣经领悟
开心一笑
品牌黑白帮
妇婴
旅游天地
购物天堂
中国村镇
旅游景点
旅游咨询
创业天地
创业故事
公司管理
创业项目
工作技巧
展会
资料
电脑技术
维修
电脑知识
文学
人间万象
历史
古诗词
人生感悟
海贝官方
商品欣赏
招标信息
海贝新闻
招聘专栏
关于我们
行情动态
海贝娱乐
海贝项目
会员礼品
商品报价
特惠信息
摄影天地
古风古韵
花鸟鱼虫
秀美山河
静物拍摄
风土人情
节日祝福
城市风光
美女摄影
编程天地
JAVA
UI
数据库
系统
asp.net
APP
JQ与JS