C#的优势和缺点

转自 xuld https://www.cnblogs.com/xuld/p/3434659.html

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#(3)——C#的优点和缺点相关推荐

  1. [大数据之Yarn]——资源调度浅学

    在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目 ...

  2. 浅学JavaScript

    JavaScript是互联网上最流行的脚本语言,可广泛用于服务器.PC.笔记本电脑智能手机等设备: 对事件的反应: <!DOCTYPE html> <html> <hea ...

  3. TencentOS浅学过程记录

    TencentOS浅学过程记录 前言 一.RTOS 二.学习资料来源 三.初步学习过程中的疑难问题解决 任务调度以及轮询时间片 消息队列与邮箱队列 互斥锁 任务中为什么一定要加while(1)循环 内 ...

  4. 【科研】浅学Cross-attention?

    Cross-Attention in Transformer Architecture 最近,CrossViT让我所有思考,这种能过够跨膜态的模型构建?浅学一下吧! 目录 1.Cross attent ...

  5. python爬虫笔记——Scrapy框架(浅学)

    一.创建Scrapy爬虫项目 步骤: 安装scrapy:在pycharm项目(自己新建的爬虫项目)的终端输入 pip install scrapy 创建爬虫项目:同样在终端输入 scrapy star ...

  6. DO、DTO、BO、VO、POJO等各种O浅学(总结)

    DO.DTO.BO.VO.POJO等各种O浅学(总结) 有哪些 O 关键的 O :DO.DTO.VO.BO 整个数据流程传递 区别用处 VO与DTO的区别 VO与DTO的应用 DTO与DO的区别 DT ...

  7. 浅学 WebAssembly(实现视频实时滤镜效果)

    前言 WebAssembly 出来已经很久了,但是一直都没有实践过,实在是不应该,所以就趁这次国庆假期浅学一下吧.毛主席说过,"实践是检验真理的唯一标准",所以我们今天就实现一个& ...

  8. 浅学Matlab:确定比赛的胜负问题

    女朋友突然找我帮她做线代的期末大作业,说是要用 matlab 写篇论文.我倒也一下懵了,虽说我的专业和打代码能沾点边,但我目前也只不熟练地了解 C++一门语言(各位大佬原谅我这个小白大一新生吧),完全 ...

  9. 浅学一下PPT吧 —— 真的很浅

    浅学一下PPT吧 -- 真的很浅 背景内容 详情摘要 工具介绍 工具使用 常见设置 Office背景 Office主题 无限撤回 自动保存 图片压缩 字体嵌入 多格式导出 PPT界面 大小背景 文字段 ...

  10. Halcon慢慢来(浅学Halcon)

    浅学Halcon 首先乱七八糟了解了下Halcon是个啥? 怎么下载,配置Halcon? 入门第一天需要了解: 紧跟一个分割处理并且把处理信息存在文件中: Halcon直接接入摄像头处理也是十分方便: ...

最新文章

  1. 超好用的几款可视化管理工具,你有吗?
  2. Scala Array sum recursive call
  3. JAVA中的设计模式三(策略模式)
  4. docker 打包_Springboot2.0学习11 使用maven插件打包docker部署应用
  5. C# 中的 in 参数和性能分析
  6. ajax请求返回结果进入success还是error
  7. vue-router学习第一天
  8. Linux下C++的多线程编程
  9. android 电话状态的监听(来电和去电)
  10. java matcher方法_Java正则表达式入坑指南:正则表达式使用的类有哪些吗?
  11. 区块链扫盲 | 认知升级,虚拟货币骗子是什么样子的?
  12. 【通讯录】Excel通讯录导入手机详细教程
  13. jQuery cdn加速
  14. 未来几年,谁能拯救手机拍照功能? 1
  15. win7开不了机按f8修复计算机没反应,win7开不了机按f8没用怎么办
  16. 百度搜索 屏蔽百家号
  17. LCD12864 菜单部分编写
  18. 开放下载 | 2022阿里妈妈技术年刊来啦!
  19. Juniper链路及接口配置
  20. 今天学到一个新姿势(划掉)知识

热门文章

  1. python少儿图形编程_少儿Python编程_第十六讲:图形界面开发
  2. 解决onenote同步速度慢问题
  3. APP内跳转QQ和陌生人聊天实现客服功能
  4. 1941 Scary Martian Word
  5. AI新贵「蓦然认知」首秀,这个和百度有点关系的公司要让机器认知世界
  6. Linux 内核工作队列之work_struct 学习总结
  7. 【数据分析】⚠️走进数据分析 3⚠️ Beautiful Soup 提取页面信息
  8. php返回微信授权信息跨域,微信受权存在的跨域问题以及解决方法
  9. 弹簧(压簧)力度计算与设计
  10. quora 分享链接