受C++启发的C#如何比Java更受启发?

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,还是我错过或误解了什么?

Cra*_*rks 51

它的名字以字母C开头.

  • 直接回答"C#如何更接近C++而不是Java?" 这是一个巧妙的回应! (7认同)
  • +1 bazillions.你赢了! (4认同)

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#(属性,委托,许多其他) .

  • 在C++中,main函数是一个全局函数,而不是一个静态方法,你错了; C++中的各种代码都可以用于类以外的东西.C++只是带有语法糖的C,还记得吗?好吧,最后一句话是完全不准确的,但它得到了重点. (10认同)
  • 默认情况下,并非每个方法都是虚拟的,这一事实确实显示了C++的一些影响 (5认同)
  • @Colin:或者来自*几乎所有其他语言的影响*.没有一个功能并没有真正告诉我们太多.查看*present*的功能会更有趣. (3认同)

Ara*_*raK 16

我认为从某种意义上说,C#更像是一种多范式语言,而不是像JAVA那样强迫单一范式(OOP).实际上这是一件好事,因为它为程序员提供了更多的自由.

  • +1给这个.而@steven,我认为允许自由在语言中是好的.C#中的功能允许我编写比Java更具表现力,紧凑和易懂的代码. (11认同)
  • @mfeingold Pure-OOP!=好代码. (6认同)
  • 我对此不以为然,这会产生许多不同类型的C#开发人员,这会使代码库变得有点严重,编码标准更难实施. (3认同)
  • 值得注意的是,C# 并不是作为多范式语言“创建”的。它是为 OOP 而创建的,并且只是 OOP。其他的一切都是后来添加的。因此,虽然今天 C# 确实像 C++ 一样是一种多范式语言,但我认为说 C++ 是多范式是创建 C# 时的灵感是不正确的 (2认同)

Bil*_*l K 12

如果你还记得这段历史,微软实际上会尝试在Java上使用他们的"拥抱和扩展"方法来添加它,这样它只能用于Windows并称之为"J ++".

Sun起诉他们所以他们出来了J#,它非常接近Java作为一个止损,让他们有时间开发自己的语言(C#).

那时候,它是当时所有语言中最好的概念的混合 - 说它更多地基于一个而不是另一个,这只是一个选定功能的集合并没有多大意义.

但是如果你喜欢这种从头开始并使用迄今为止语言的所有最佳功能的想法,一定要检查Scala - 它已经超越了Java或C#可以做的事情,即使有一个重大的功能革命.

  • 此外,J ++ <i>是</ i> Java 1.1,其中包含JNI支持的适用例外以及我在下面提到的指令.J ++运行在支持Java 1.1的MSVM上,并且由于法院的禁令而不得不停在那里.甜蜜的主我对此非常了解.是的,我被困在J ++地狱多年,虽然起初它实际上是Windows中最好的3GL IDE选项.你得到了最好的Delphi和Java一起捣碎,而且没有VB 6的任意痛苦. (5认同)

Joh*_*aft 8

受C++启发的语法,受Java启发的VM和库(在.net 1.1中)与Delphi库的关系几乎为1-1.


Dav*_*ims 7

我认为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

  • +1.非常准确.有人记得90年代中期的整个人.:)当时,我有点疯狂,因为我喜欢J ++的变化; 如果他们*采纳了MS建议的改变(MS确实在某一点上很好地问了Sun,IIRC)而不是与他们打过仗,C#永远不会存在.所以当时,我对Sun很生气.现在我很开心.我爱我一些C#. (2认同)

Stu*_*Stu 5

对于初学者,它允许指针操作(在不安全的块中).

  • 是的,这最终归结为这样一个事实:C#受到*两种*语言的启发,并添加了它自己的东西. (5认同)
  • 我不确定为什么人们会赞成这一点.虽然C#确实有指针,但你很少使用它们.即指针=不是定义语言功能. (5认同)
  • @Max:*任何*指针操作都比Java更接近C++.:) (4认同)

Mar*_*ell 5

就个人而言,我会说它比C++更接近Java,但是对于大熔炉来说还有一些额外的东西:

  • 代表(大致是函数指针)
  • 用户定义的值类型

泛型对于所有3个都是不同的,但Java的类型擦除泛型可能(尽管它是一个奇怪的比较)更接近C++模板而不是基于C#运行时的泛型.