最近,C#似乎很流行。我听说语法上与Java几乎相同。Java和C ++已经存在了很长时间。由于什么原因,我应该选择C#而不是Java和C ++?
最近,C#似乎很流行。我听说语法上与Java几乎相同。Java和C ++已经存在了很长时间。由于什么原因,我应该选择C#而不是Java和C ++?
Answers:
问题应该是“哪种语言更适合现代的典型应用程序开发?”。
编辑:我解决了下面的一些评论。一句话:考虑一下,当您有很多本来就是习语的东西时,与每次自己实现或下载并使用它们有很大的不同。几乎所有内容都可以使用这些语言中的任何一种来实现。问题是-语言本身为您提供了什么。
所以,让我烦恼不已(有些论点适用于两种语言)...
this
指针参数),从而在类之间创建更动态和灵活的关系。如果您不知道这意味着什么,请进行编辑,然后尝试分配一个返回void并接受void到void (*ptr)()
变量的成员方法。C#委托随身携带了this
指针,但是用户不必总是在乎这一点。他们可以将void()
任何类的方法分配给任何其他void()
委托。using
语句)。Java 7也将支持此功能,但是C#拥有更长的时间。yield
声明更好的枚举支持。this
指针访问字段,并将执行该方法的方法绑定到通用函数指针(即不在同一类中),则根本没有本机方法。在C#中,您可以免费获得。您甚至不必知道其工作原理。this
指针。using
声明以及IDisposable包装器显然是RAII的一个很好的例子。请参阅此链接。考虑到您拥有C,在C#中不需要在C#中像在C ++中那样需要RAII。在确实需要的特定时间,可以显式使用该using
语句。另一个提醒:释放内存是一个昂贵的过程。在很多情况下(尤其是当您有大量内存时),GC都有其性能优势。内存不会泄漏,您也不会在重新分配上花费大量时间。而且,分配也更快,因为您不会每次都分配内存,只是偶尔一次。调用new
只是增加了最后一个对象指针。new
和手动管理您的内存delete
,根据经验,这总是会在这里和那里导致错误,或者(对于C ++ 11)您可以本机使用自动指针,但请记住,它们会增加很多代码的噪音。因此,GC仍然有优势。Windows是客户端计算机上的主要操作系统。Windows应用程序的最佳GUI框架是Winforms和WPF以及.NET Framework。与.NET Framework及其API 配合使用的最佳编程语言是C#。Java不能替代它。C ++是一种较旧的语言,没有自动内存管理。C#与C ++相似,但是具有自动内存管理功能,您不必使用指针,这可以提高工作效率。在某些情况下,C ++仍然是最佳选择,但对于企业中常见的格式密集型数据库应用程序却不是。
如果您习惯于在Windows环境中使用C#,那么您将需要最少的投资来学习用于服务器编程的IIS和用于基本管理的Windows Server。
如果您要开发要部署在公司网络中的软件,则它们很可能会使用Windows中心环境,并使用带有Active Directory的Windows Server。在这样的环境中,轻松集成和部署C#和.NET Framework制造的解决方案。
就个人而言,我是Java开发人员,而不是C#开发人员,但是我使用网络。如果要为Windows网络开发网络应用程序,我将切换到C#。但是我更喜欢Java用于基于Linux的Web服务器。如果我不会有太多依赖关系,我会选择C ++用于嵌入式系统。
是的,C#是比C ++和Java更好的语言,具有更现代的功能,但这不是选择C#的最重要的事情。
软件环境对于选择C#最重要。如果您在具有Windows客户端,Windows服务器,Active Directory,IIS以及可能还有SQL Server的环境中工作,那么C#是.NET Framework最好的语言。
如果您在带有Web服务的Unix环境中工作,那么Java将是我的选择。而且,如果您使用嵌入式系统或必须与硬件设备集成,C ++是一个不错的选择。
C#和Java
如果满足以下条件,C#是一种非常好的语言:
C#作为一种语言在各种方面都比Java更好(属性,值类型,统一泛型等的更好语法)。与Java相比,我更喜欢C#作为一种语言,但从总体上看,它们是相当相似的语言,适用于相似的应用程序。
另一方面,Java也具有一些很大的优点:
因此,Java vs. C#是一个非常接近的称呼,它的确取决于您是想参加Microsoft阵营还是开放源代码/跨平台阵营。
就个人而言,我更喜欢Java,因为:
C / C ++
C / C ++基本上完全是另一种野兽。由于以下原因,我现在不建议将其用于通用应用程序开发:
但是,在某些特定领域中,无疑是一个不错的选择,尤其是:
因此,从根本上讲,C / C ++是且仅当您专注于特别适合它的领域之一时,它才是一个不错的选择。
I heard that syntactically they are almost the same.
语法上?谁给猴子讲语法?语法仅对一件事有好处:允许从语法相似的语言更快地迁移。而已。
C#比Java更好。考虑它们的通用和功能编程支持-C#领先于Java。更不用说运算符重载,以及其他好东西-C#的功能要好得多。不可能将Java比C#更好。
C ++和C#更像是一场竞赛。C ++具有令人讨厌的古老编译模型和来自C的许多遗留疾病,但是它的模板比泛型强大得多,并且它的资源管理方法通常更灵活,更强大,就像using
完全失败一样,并且可以执行快点。
好吧,它C#
具有一些不错的内置功能,例如LINQ
和委托。它正从两个世界最好的- Java
和C++
。看看这里为全面的比较。
但是我更喜欢这个Java
世界-更多的开源框架,它可以在每个平台上运行。而且不要告诉我Mono
-这不是一个可靠的选择。
根据一些消息来源(请参阅例如http://www.indeed.com/jobtrends),C#仍然不如Java流行,并且像C ++一样流行。
C#确实提供了Java所缺少的功能,例如,直接支持某些编程习惯,例如属性,功能性编程风格等。C#比C ++具有更高的抽象级别,当开发时间比程序速度更重要时,这是一个优势。
就个人而言,我仍然更喜欢Java / C ++世界。正如Petar Minchev所说,Java具有更多的开放源代码框架和应用程序,它可以在任何地方运行,并且与特定的供应商和操作系统的联系较少。即使代码经常需要从一个平台到另一个平台进行改编,C ++也具有类似的优势。由于我更喜欢在Linux上进行开发,并且据我所知,我还不能完全掌握Linux上的C#,因此我从未真正对C#感兴趣,因为我的编程需求已涵盖在C,C ++,Java和Scala中。
另一方面,对于许多与特定供应商绑定的开发人员来说,这不是问题:Microsoft在操作系统市场上处于主导地位,而C#提供了很多工作机会。因此,IMO许多开发人员都采用C#,因为它不仅是功能丰富的语言,而且还是一项不错的投资。
那么“哪个软件开发框架包括编程语言”更好呢?
您忘记了包含其他内容,例如将要使用的“环境”。
您是否仅要在Windows OS上工作,但是不必太低级,也没有很多内存和其他资源?
选择.NET作为Windows上的框架,并使用C#。
您是否仅要在Windows上工作,但是不必低级,但是,它没有很多资源?
选择Delphi框架(以及Object Pascal Delphi编程语言或Lazarus Object Pascal编程语言)
是您的应用。需要在不同的手机上支持多个平台(例如游戏)?
选择Java框架和Java编程语言。
是使用KDE作为图形界面的Linux吗?
使用C ++选择QT框架
是使用Gnome作为图形界面的Linux吗?
使用C ++选择GObject / GLib框架
您是否要处理许多低级操作,例如开发驱动程序?
Plain C或C ++用于几个带有标准库的操作系统,并以此为框架。
只是我的2美分。
还没有提到的几件事:
C#比C ++更好,因为:
它消除了头文件,从而简化了工作。
C#比Java更好,因为:
它支持引用类型(类)和值类型(结构)用户定义的类型,如果您知道自己在做什么,则可以带来显着的性能优势。
它支持类似于单方法接口的委托,从而大大简化了涉及单方法对象的频繁出现的构造的编码。
您应该为预期的环境和专业知识选择最佳的语言。
如果您在仅Microsoft环境中工作,请选择C#。虽然C#是根据ISO / IEC 23270:2003进行标准化的,但是Microsoft的版本仍然是唯一完整的实现。该语言未涵盖该语言的几个关键部分,因此需要获得Microsoft的专利。没有其他人会为其他系统实现该语言的完全兼容版本,因此,实际上,只要您使用该语言,您就被供应商锁定为Microsoft Windows和.Net。如果您正在寻找在移动市场中使用的技能,最好去找另一种语言。
Java是可行的,但是有很多开销,部分原因是垃圾收集这样的功能。Java也未通过ISO / IEC标准化,因此如果您切换Java的平台和版本,则不能保证只有Sun / Oracle的最佳意图。如果您最终打算使用Android,那绝对是正确的方法。Android的编程基本上是Java,但有一些更改。
C ++是标准化的,几乎所有编译器都遵循国际标准,因此您可以保证行为,但该语言不会保护您自己。您必须自己执行清除和溢出检查。这不难。C / C ++程序员已经做了很多年了。Apple将Objective C用于所有事物,因此,如果您要针对Apple,建议您尝试使用此方法。
如果您发现自己在某个时候落后于Windows,建议您同时学习C / C ++和Java-两者目前都可以销售。
关于C ++与C#(因为我对Java不够熟练),我在这里缺少的是在Windows上访问低级内容的能力。例如,您还不能使用C#开发本机显示驱动程序,但是可以使用C ++。这不会使C ++更好。我将C ++与C#视为汇编与C。
如果您查看实际实现功能所需的时间,我认为C#效率更高。.Net运行时的性能损失对于所开发的99%的应用程序而言可以忽略不计。如果您正在运行一个紧密的循环,那么这可能很重要,可以肯定,但是在大多数情况下,应用程序处于空闲状态,等待任何类型的输入,信号或中断(磁盘IO,按钮单击,网络,动画完成) 。
具有所有功能的CLR库还有另一个很大的好处。当我向初级开发人员培训C#时,大多数人说他们喜欢类,成员和名称空间的逻辑命名约定。在整个SDK中找到方法的功能是合乎逻辑的,而Visual Basic 5则存在严重缺陷。这极大地帮助了他们采用图书馆。在学习了一种语言的语法之后,学习一个新的库对于掌握任何SDK都是很重要的。它使您免于重新发明轮子。