Mat*_*ias 20 c# c++ java programming-languages language-history
在查看C#的历史时,我发现C#被视为对C和/或C++的更新.这对我来说有点意外,表面上看,我看到C#和Java之间有更多常见的想法(想到垃圾收集).我不是用Java编写代码,但是我通常没有跟随Java代码的问题,并且经常阅读有关Java中我可以在C#中轻松转置的模式的书籍,并且老实说不能对C++说同样的话.
所以我的问题是,C#如何更接近C++而不是Java?这只是拒绝承认Java,还是我错过或误解了什么?
Ran*_*pho 33
IMO,认为C#比C++更受启发,而不仅仅是Java营销; 试图以一种Java无法做到的方式将顽固的C++程序员带入托管世界.C#主要来自Java; 任何看过历史的人,特别是Sun和微软之间90年代中期的Java VM战争,都可以看出Java是主要的父母.
C#的语法仅在某些领域更接近C++:指针操作(Java没有),派生声明(即public class Foo : Bar, IBaz而不是public class Foo extends Bar implements IBaz),以及运算符重载.
其他一切都像Java(在类声明中声明的静态main,没有头文件,单继承,许多其他),就像Java和C++(基本语法),或唯一的C#(属性,委托,许多其他) .
Ara*_*raK 16
我认为从某种意义上说,C#更像是一种多范式语言,而不是像JAVA那样强迫单一范式(OOP).实际上这是一件好事,因为它为程序员提供了更多的自由.
Bil*_*l K 12
如果你还记得这段历史,微软实际上会尝试在Java上使用他们的"拥抱和扩展"方法来添加它,这样它只能用于Windows并称之为"J ++".
Sun起诉他们所以他们出来了J#,它非常接近Java作为一个止损,让他们有时间开发自己的语言(C#).
那时候,它是当时所有语言中最好的概念的混合 - 说它更多地基于一个而不是另一个,这只是一个选定功能的集合并没有多大意义.
但是如果你喜欢这种从头开始并使用迄今为止语言的所有最佳功能的想法,一定要检查Scala - 它已经超越了Java或C#可以做的事情,即使有一个重大的功能革命.
我认为Java - > C#连接比C++ - > C#强大得多,主要是因为,正如已经指出的那样,C#是Sun诉讼对MSVM涉嫌违反Java规范的结果.尤其是J ++使用了诸如"委托"之类的其他关键字/功能,这成为了C#的主要区别特征之一,这是Sun的主要抱怨之一.
其他功能,如@dll和@com指令(在Java和C#中预先设定了属性)也是投诉的一部分.请注意C#的COM PIA指令与J ++中的@com指令之间的相似性.将J ++的JDirect与C#中的本机互操作进行比较.(诉讼的另一个原因是,MS完全禁用了Java的JNI,而是支持Windows特定的JDirect.)
最后,Anders Hejlsberg是负责J ++和C#的人,因此Java/J ++和C#之间的联系非常紧密.毫无疑问,Hejlsberg拥有C++思维的许多方面(特别是方法指针/委托功能,他首先在J ++中浮动),但可以肯定地说Java必须是最重要的.
在很多方面,你可以看看微软改进的Java版本,J ++作为C#0.1
对于初学者,它允许指针操作(在不安全的块中).
就个人而言,我会说它比C++更接近Java,但是对于大熔炉来说还有一些额外的东西:
泛型对于所有3个都是不同的,但Java的类型擦除泛型可能(尽管它是一个奇怪的比较)更接近C++模板而不是基于C#运行时的泛型.