语言特性之我见

根据《与C++社区混战,C#会重蹈覆辙吗?》所写:

 

保留C#以下功能:

1. 面向对象

2. 接口

我觉得要是没有接口,这个也做不了优美的面向对象阿。

 

3. 构造器、字段、方法

没有这些怎么面向对像呢?难道面向对象是个空壳?

 

4. 垃圾收集

垃圾自动收集表面上是挺好,但是毛病也不少。我觉得.net之所以那么慢,99%都是因为这个玩意。

 

5. 异常

异常的作用就是让你的代码产生异常。而且我觉得一点都不优美。是所有语法特性中最难看的。

 

6. 并发支持——这是firelong唯一投票支持的新特性,因为它在今后的项目太常用了。

还没用过,系统化的解决方案确实省了很多事,不知道效率如何。

 

7. 和其他语言的互操作(类似P/Invoke)——那些不适合C#做的,用其他语言来做,然后与C#互操作。

这个要是没有,我不觉得有什么奇怪。不就是为了和老古董的c语言之类的协作么,如果.net发展完善,同时改进性能,同时用.net重写系统接口,那么为什么还要依赖其他语言的代码呢?因此,这不过是历史遗留问题的产物,不具生产力的。

 

 

删除C#以下功能:

1. 委托和事件(这些都可以用接口来做,参考Java)

委托需要,事件就不必了。委托就是函数指针,很重要的编程概念。接口做能有函数指针方便?

 

2. 反射(反射用处很小,如果真想用反射,请用其他语言)

反射是.net的精髓所在。不用反射,请用其他平台。

 

3. 特性(也可以用接口做,C++没有特性不是一样活得很好)

特性是特殊用途的,和正常编码是两码事。

 

4. 属性、索引器、析构器(都是方法)

很好的语法糖。析构器这个没人说不是方法吧?只是担任特殊任务而已。只是.net的自动回收垃圾技术下,析构器好像有点名不副实。

 

5. JIT编译(直接编译成native代码,完全没必要JIT,微软当初JIT是因为承诺跨平台,但是现在C#真的跨平台了吗?还是Windows上跑,Mono这种阿斗别提了。)

可以改进,但是免不了要这一层。尤其现在手机之类的新平台那么多,没有自动编译这个功能,就有点走回头路了。问题不是jit,而是jit的策略。

 

6. 泛型(没必要,用的很少)

范型是一种抽象技术,虽然不是面向对象传统的范畴,但是和面向对象的目的是一致的。既然你认同面向对象,为何不认同范型?

 

7. Linq(去掉,还是用Sql语句+存储过程来的实际)

Linq是很优美的语言,虽然性能不是很好。但是漂亮也是生产力!

 

8. dynamic

不懂。

原文地址:https://www.cnblogs.com/Nobel/p/1761848.html