对于C#,coder中可以分为2类:一类是C#死忠,对它赞赏到极点;另一类刚好相反,对它极度排斥。

本文将以全面、客观的方式评价这门语言,特别是语法方面。


其实很多人评价一门语言是带着一种感情色彩的。有些人支持C#是因为他只会C#,或者因为他是微软的老用户。但更多的人支持C#,是因为他通过比较发现C#确实比其它语言做的好的多。如果将C#和C++,java比较。多个事实证明,在语法上C#确实比C++和Java做的好。下文将会详细分析好在哪。如果将C#和python, js之类的语言做比较,则会发现C#非常繁琐,还无法真正跨平台。所以很多人觉得C#不是优秀的语言。这是不对的,因为C#和python做的事情是不一样的,将它们进行比较毫无意义。就像电子邮件和短信进行比较----毫无疑问,短信更方便使用----但它们的功能不一样,不能仅仅因为短信更方便就完全否定电子邮件。


C#优点1: 相比java,有更先进的语法体系

由于C#是后生,所以其很多语法都是其它语言的改进。作为一个商业产品,C++用户是C#的首要目标,所以它充分照顾到了C++用户的习惯。从整体看,C#语法比java更优雅。这里java粉丝就可能会站出来,说java也有好的地方----对的,我没说C#在任何地方都优于java,请不要举出局部上的反例----C#和java比较的文章比比皆是,这里就不再重复了。

C#团队在设计语法时充分照顾到了常见的业务需求,而不是单纯的技术层面上的纸上谈兵。于是,C#支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。


C# 优点2:强大的周边

C#的IDE功能非常强大,C#的文档有包含中文的多国语言,C#所需要的运行平台在用户量极大的windows上内置。一切的一切都在向我们诉说,C#有一个强大的爹。同时也说明,C#不仅仅是一个语言,更是一个极具匠心的产品。所以,用户可以享受到这个产品的各个功能----包括售后服务。


以上2个优点就是C#的全部优点了。我想任何一个C#粉丝想证明C#优秀,无外乎上面两个理由。下面让我们更来研究它的缺点。


C#缺点1:它是一个产品

作为微软的产品,它不能帮助竞争者----其它操作系统。作为微软的产品,它必须追求稳定、严谨,而不要出现任何错误。

C#团队实力确实非常强大,导致C#不会出现任何一个低级错误,就连 if(a = false) 这样的代码都会出现一个警告。C#的语法、底层库也无时不刻在印证一个理念:我们做的是产品,我们必须保证产品根据我们所期望的工作,而不允许出现任何错误。

这是一个优点,也是一个缺点。

当我们的需求和产品设计者所期望的一致时,事情会变的非常轻松。但如果需求和期望不同时,麻烦事情会接踵而至。 举个例子,当我们希望switch能够贯穿case时,就会出现麻烦----产品设计者不允许用户直接这么做----虽然他有合适的理由,也提供了实现这个功能的替代方法,但用户必须按他说的做。如果这种情况发生在其它产品设计者未考虑到的需求时,那么这个麻烦将会更大。比如当我们想要重载>>来模拟C++代码时,就会发现这是一个不可能的任务。

很多人都有这种感受,直接使用IDE自带的功能开发,做起来非常轻松。但一旦有一种自主的想法时,就很难实现----比如修改软件主题。


C#缺点2:没有考虑代码量

这种问题之所以会出现,是因为微软人多----人家不在乎。在C#中,文档注释需求书写xml,但是文档注释却是不能继承的----用户必须手动为每个函数和重载添加注释。C#的很多常用的工具类因为其使用的局限性(如菜鸟用了就会出错)而不被公开。典型的例子如下:

public string GetValue(int index) {if(index < 0) throw new ArgumentOutOfromRangeException();if(index > this.Count) throw new ArgumentOutOfromRangeException();return GetValueInternal(index);
}internal string GetValueInternal(int index) {//...
}

C#把用户当成傻子----GetValue 会传递一个非法的index,然后自己则使用更高效的GetValueInternal 。C#系统库的设计通过对 index 检测,来确保抛出的是一个符合意义的异常。

那用户怎么办?如果在项目中,不检测 index 是否合法,则显得不严谨,代码质量低(不检查 index,会导致 index 错误时将出现 IndexOfRangeException,而不是 ArgumentOutOfRangeException,这会让第三方用户迷惑:到底应该捕获哪个异常)。而检测则是在浪费代码量,一个函数尚且如此,一个项目可见一斑。

此外,用户经常需要使用一个类来实现功能,但其实这个类在系统库中是存在的,但由于它只是一个内部使用的功能模块所以不是 public 。这时用户只好另起炉灶。这也不难解释为了明明有 Buffer.Copy 这个方法,系统内部却只会调用 Buffer.CopyInternal(不是public的) 而不是 Buffer.Copy ,而 Buffer.CopyInternal 却是用户真正所需要的函数。


总体看,C#不适合做项目。它是一个很大的坑,因为它会通过各种方式消耗用户的时间。特别是追求完美的人,想要紧跟微软的节奏创造完美,那简直是在拿时间开玩笑。而对于仅仅想做完项目的人,也会越做越烦:明明简单的事情要搞这么复杂。

即使如此,C#终究也只是一个语言,一个工具。客观评价一个工具的好坏没有实际意义,关键看用户能否熟练使用,并且扬长避短。没有最好的语言,但有最适合自己的语言。

客观评价C#的优点和缺点相关推荐

  1. 给ADAS泼冷水?不,是客观评价

    给ADAS泼冷水?不,是客观评价 周纯粼 发表于: 2015/02/10 16:19:31 来源:盖世汽车网 23 0 这些驾驶辅助系统到底有多可靠?它们值得依赖吗?近日,有外媒指出,驾驶辅助系统也会 ...

  2. 是时候客观评价Retrofit了,Retrofit这几点你必须明白!

    Tamic/CSDN 尊重原创:http://blog.csdn.net/sk719887916/article/details/53613263 是时候客观评价下Retrofit了,retrofit ...

  3. 讲解视频质量,视频质量测试,主观客观评价视频质量

    1 从模拟信号到数字信号 2 客观视频质量 3 主观视频质量 4 参见 5 参考 视频质量是量化一段视频通过视频传输/处理系统时画面质量变化(通常是下降)程度的方法.由于视频处理系统可能会导致一定的视 ...

  4. 图像质量评价方法中客观评价方法又可以分为三类

    早期的图像处理是随由于通讯方面的要求而发展起来的,随着图像处理技术的发展,数字图像处理技术与理论已经成为计算机应用的一个重要领域,广泛应用于众多的科学与工程应用,如遥感.医学.气象.通信等.然而随着图 ...

  5. 十种客观评价语音质量的方法

    目录 1. 基于SNR的语音质量评价标准 1.1 SNR和分段SNR 1.2 频域SNR 2. 基于LPC系数的语音质量评价标准 2.1 对数似然比距离 2.2 Itakura–Saito距离 2.3 ...

  6. matlab语音信号的变速_十种客观评价语音质量的方法

    语音客观评价标准一般分为语音质量评价和语音可懂度评价,这里先介绍语音质量评价.提起语音质量评价,大家第一个想到的肯定是信噪比这个十分常用的评价标准以及它的相关衍生标准,这里总结一些常用的语音质量评价标 ...

  7. 五大评价偏误 | 管理者如何做到客观评价员工?

    引言 企业管理者常说"对员工一视同仁",然而,一些不理性的印象.感觉,常会不自觉地左右人们的评价. 职场上,有哪些容易踏入的评价误区?管理者又该如何做到客观公正的评价?「得到」作者 ...

  8. 04|主观与客观评价音频质量

    目录 引言: 一. 音频主观评价方法 MUSHRA 介绍 特点: 应用MUSHRA例子: 常用的主观评价指标: 二. 音频客观评价方法 有参考评价: PESQ与POLQA PESQ的算法步骤: not ...

  9. 安卓和java哪个前景好_2016安卓开发和java开发哪个前景好? 请详细客观评价近期以及长远的优势,谢谢!...

    2016安卓开发和java开发哪个前景好? 请详细客观评价近期以及长远的优势,谢谢!以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来 ...

最新文章

  1. 基本类型变量和引用型类型变量
  2. laravel报错:TokenMismatchException in VerifyCsrfToken.php
  3. Ubuntu 软件包管理APT
  4. xss_url通关_1-10
  5. java图像处理之幂律变换
  6. ubuntu登陆后一闪回到登陆界面
  7. 设计模式_2_单例模式
  8. java 复选框 背景色_将多选框选中时打勾的颜色
  9. 影响计算机质量度的指标,[计算机]专业版的质量度权重分析.ppt
  10. [RBA开发系列一] 建立http 请求的process
  11. StringBuffer练习
  12. 计算机组成原理实验认识多思网络虚拟实验系统_1000MW超超临界火电机组虚拟仿真平台...
  13. NetXray使用说明之(6)----捕捉oicq message报文
  14. Machine Learning - Coursera 吴恩达机器学习教程 Week4 学习笔记
  15. UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 的解决方法
  16. 把指针当作动态数组使用
  17. CO-PCA-利润中心会计
  18. 水利专业学计算机吗,大学哪些专业最易被误解?计算机专业居榜首,水利学生气到不行!...
  19. 解决 输入kubectl get pods -o wide后没有显示ip
  20. 当存储遇到开源 可以先从冷数据着手

热门文章

  1. 131、基于51单片机智能电子秤HX711仿真设计
  2. 来自Google AI:DELG,统一全局和局部特征的实例识别研究
  3. MYSQL实现ATM所有业务(附源码)
  4. 从零开始编写网络游戏--卷首语
  5. JAVA入门[16]-form表单,上传文件
  6. 四年级上册计算机知识点总结,四年级上册英语各单元知识点整理
  7. python闯关训练营怎么样3.0_【新升级】3周!0基础Python量化投资!闯关式学习打卡,解锁新技能!...
  8. 新版Postman_9.15.2工具介绍
  9. 16.windbg-.cxr、.frame、dt(查找设置设备上下文、切换局部上下文、查找结构体)
  10. 年度影像机皇 vivo X70系列首销路演引爆合肥