园子里的首页已经在所谓的C#大论战和语言大作战上,风风火火地持续了快一个月了,我想也该告上那么一段落了。

我只在这里写下我眼中的看法。

1. C#的语法糖

在之前,每当别人问起我,某个C#的新语言特性的时候,我总会说,其实就是这么一回事,他不过是一个语法糖,没什么稀奇的,你可以看一下Reflector反编译出来的代码。

可是现在当我仔细思考之后,发现其实语法糖更多地不仅仅是为了我们使用上的方便,而且是代表了一种编程模式以及思维模式的转变。

从最简单地说起,我在之前的文章说过一点,面向过程的语言的核心不在于函数,而在于处理事情的过程,而函数则完全是为了代码的规范,以及可维护性才出现的。但是当我们把若干个函数整理成了我们的类库之后,我们除了使用上方便之外,更意味着我们需要提高我们的逻辑层次,将原本的细粒度逻辑粗化。

我看到了在winter-cn的文章中举了这样一个例子,把大象放入冰箱分成几步,第一第二第三,Ivovy老大回复了这样一句话,语言的发展是让这些都变成一步:把大象装入冰箱。我非常赞同,我认为这就是未来语言的发展方向。

在我之前的文章《基于自然语言的软件工程与程序设计》中,我谈到未来语言的发展方向是基于自然语言的编程,还谈到了一种理想的状况,就是会说话的人就会写程序。即使我们不把眼光放得这么远,我认为,只要了解业务逻辑的人就会编程,这个是完全不过分的。

接下来,我们看一个在C# 3.0 中的关键字:var。在之前,很多人说var最大的作用是为了让懒的人可以不必去打字打出类型。其实我个人更认为当var关键字和我们强大的Visual Studio工具结合起来的时候,就在倡导我们用一种团队思维的角度去看待问题。

当我们调用底层提供给我们的接口,或者使用其他类库返回给我们的方法时,我们不需要了解他的具体类型,我们只需要用var来得到该类型,然后用强大的VS开发工具的智能感知去得到我们需要的属性(或方法)即可。

至于像Lambda表达式所提倡的FP思维,我就更不多说了。

总之,Firelong眼中说,C#语言越来越臃肿的语言特性,然后应该越来越从简,我个人认为,这不是在抹杀C#的进步,更关键的是在抹杀一种编程思维的进步

2. 语言,还是语言

在语言产生之初,语言之争似乎就从未停止。无论是C和C++。还是Java与C#。从来都是各执一词,然后难分胜负。

我不是一个牛人,无法像Jeffery Zhao一样来举出各种各样的理由来反对Java,或者反对其他语言。至少在我目前的阶段来看,我不是一个语言方面的攻击者。

我只能从经济学的角度去分析:每门语言,每门流行的语言,在市场上占有一定份额的语言,必定有着他的优势所在,否则他必定会被市场所淘汰。而每门语言也必然有着他的劣势,和不适用性,正是这样才催生了其他语言的发展,从而产生一种平衡的关系。

在这里,我只说托管语言。从某种程度上,至少从我目前的程度上,我认为,托管语言来开发桌面程序的确是不大合适的,相对于C++。(在此强调,我并没有过太多桌面程序开发的经验)针对当前大多数的商业商品来说,无论是旧版的飞信,还是概念版的QQ,采用托管语言无疑都是失败的,而我们看大部分成熟的桌面程序,还是采用C++来开发,这确实也能说明一定道理。

而著名的《鬼泣4》采用C++和C#做交互来共同开发,也在一定程序上说明了C#在UI上的薄弱性。(只是看新闻传说,未经证实)

总之,我个人认为:不要轻易地去抨击某一门语言,每门语言都有着他的适用性,你的项目因为C#而失败,只能说是你项目不该选择C#,而不能说C#无法满足你的项目,就说C#是失败的。这样的逻辑明显就是不对的

3. 语言与设计模式

在之前的文章中,我抛出过这样的一个观点:设计模式实际上是牺牲了语义的自然性,来换取软件的可重用性和可维护性

对于C#这样一门面向对象的语言而言,根本还是要从面向对象来出发,那么面向对象的核心是什么?每个类都有章可循

但是,在很多的时候,我们为了扩展性,重用性,可维护性,不得不求助于GOF或者其他的设计模式,我个人认为,设计模式是凸显了“语言”的无助

因而,在语言的层面上融入设计模式,我个人认为,这不是一种错误,相反,这却是语言发展的必然,至少是基于面向对象语言发展的必然。到面向对象语言发展到极致的时候,应该是一种我们不需要借助设计模式,只要依靠语言提供给我们的语法(或者是”语法糖“)就足够完成我们用其他的设计模式可以完成的工作,这才是面向对象语言发展的大成

再进一步地说,没有任何一门编程模式是银弹,可以解决我们的所有问题,无论是面向对象,面向过程,还是FP,一种发展逐渐完善的语言应该是将各种编程模式于一体,提供给程序员一种极高的思维抽象,这才是未来语言的方向。

转载于:https://www.cnblogs.com/kym/archive/2010/07/06/1771827.html

浅谈C#的语法特性及杂七杂八相关推荐

  1. mysql事务的四大特性_浅谈数据库事务四大特性

    数据库四大特性分别是:原子性.一致性.分离性.持久性.下面我们看看具体介绍. 原子性 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行. ...

  2. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...

  3. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树...

    上篇文章我们主要介绍了线性数据结构,本篇233酱带大家康康 无所不在的非线性数据结构之一:树形结构的特点和应用. 树形结构,是指:数据元素之间的关系像一颗树的数据结构.我们看图说话: 它具有以下特点: ...

  4. HTML中浮动的特性,浅谈CSS浮动的特性

    本文介绍了CSS浮动的特性,分享给大家,顺便给自己留个笔记 浮动具有以下特性: 盖不住的文本 浮动元素后面不是块级元素,后面的元素将会和它并排(除非设置了元素的宽度,并且屏幕放不下时将会换行) 浮动元 ...

  5. 浅谈关于油麦菜的特性与如何种植优质品种的油麦菜

    哈喽大家好,非常高兴今天可以和大家一起分享关于油麦菜种植的相关知识.你们可能不知道油麦菜又名莜麦菜,属菊科莴苣属植物,含有大量维生素A,维生素B1,维生素B2和大量铁和钙等营养成分,在生食植物中可是拥 ...

  6. LaTeX快速入门:一文浅谈TeX排版语法

    LaTeX是一种命令式的排版工具.这里直接安装了完整版的MacTeX,然后打开TeXShop开始尝试写第一个Hello LaTeX排版. 目录: Hello LaTeX LaTeX框架 中文 支持空格 ...

  7. 页面显示 amp html6,浅谈HTML5 amp;amp; CSS3的新交互特性

    本文标题的这副图片,是用Phosotshop制作的.但是,在搜索引擎中你却无法搜索到它,搜索引擎还没有强大到能够识别图片里面的文字.并且由于图片的体积不算太小,可能网速慢的网友在浏览的时候不得不耐心的 ...

  8. html5交互效果,浅谈HTML5 CSS3的新交互特性

    本文标题的这副图片,是用Phosotshop制作的.但是,在搜索引擎中你却无法搜索到它,搜索引擎还没有强大到能够识别图片里面的文字.并且由于图片的体积不算太小,可能网速慢的网友在浏览的时候不得不耐心的 ...

  9. html5中的css特性,浅谈HTML5 CSS3的新交互特性

    本文标题的这副图片,是用phosotshop制作的.但是,在搜索引擎中你却无法搜索到它,搜索引擎还没有强大到能够识别图片里面的文字.并且由于图片的体积不算太小,可能网速慢的网友在浏览的时候不得不耐心的 ...

  10. mysql innodb4大特征_MYSQL中InnoDB特性浅谈

    许久没有更新博客,上周末放假把网易大牛姜sir的著作MYSQL技术内幕InnoDB存储引擎又翻阅了一番,对当前工作的InnoDB特性有了一些新的认识,下面谈谈自己的读后感. 1. InnoDB的体系架 ...

最新文章

  1. 我要阻止做java开发的男朋友去创业型公司工作吗?
  2. 【Codeforces Round #767 (Div. 2)】 C. Meximum Array 题解
  3. 数据中心新认证出现,UPTIME面临挑战
  4. 使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
  5. 用html5做一个简单网页_用新款ws2812灯带做一个简单的窗花
  6. PbootCMS V1.1.4 正式发布
  7. JS数组的相关操作(循环、查找、过滤、排序等)
  8. (转载)Http Module 介绍
  9. PCL Save VTK File With Texture Coordinates 使用PCL库来保存带纹理坐标的VTK文件
  10. JAVA学习——GUI鼠标画图交互练习
  11. ThinkPHP内核全行业小程序运营管理系统源码 自由DIY布局 一键生成小程序
  12. 视频录制——SurfaceView + MediaRecorder 实现视频录制功能
  13. CTSC/APIO2018咕咕记THUPC2018打铁记
  14. 自动化测试如何计算ROI
  15. BatchNorm的通俗解释
  16. 找完数——完数的使用
  17. 学完C再学C++(6)继承类
  18. grub命令 u盘安装linux,通过grub-install命令把grub安装到u盘-总结
  19. spring源码框架
  20. C++学习笔记(第一、二阶段汇总)

热门文章

  1. Javascript对象的方法赋值
  2. h3c等价路由(rip)
  3. 计算机用户组权限管理,配置Windows server 用户和组权限实验详解
  4. linux dev log设备文件,Linux中设备号及设备文件【转】
  5. 华为手机不小心点了始终_年末大盘点:从亲民到旗舰,2020年最值得购买的华为手机...
  6. DNF怎么查看服务器状态,dnf显示服务器读取中进不去怎么办 dnf显示服务器读取中进不去解决方法...
  7. java jlabel位置_Java Swing – JLabel位置
  8. 通过 Hibernate 调用存储过程
  9. redis bigkey 删除问题
  10. php中的 server 2008,window_Windows Server 2008开发指南解析,  Windows Server 2008开发指南中 - phpStudy...