由于什么原因,我应该选择C#而不是Java和C ++?[关闭]


46

最近,C#似乎很流行。我听说语法上与Java几乎相同。Java和C ++已经存在了很长时间。由于什么原因,我应该选择C#而不是Java和C ++?


16
在撰写本文时,问题是教科书示例中没有建设性的“哪种语言更好?” 这里的题外话。由于它实际上得到了很好的,经过深思熟虑的答案,因此我尝试通过编辑使其更具建设性。不过,在询问这种性质的问题时,请记住FAQ此博客文章
亚当李尔

让我添加一些前卫的项目。.NET 为它的语言提供了一个定义明确的DOM(例如CodeDOM),因此在运行时动态生成事物变得更加简单和高效。作为基础设施功能,这也可能会有所帮助。而且,类型系统与所有本机W3类型都具有1对1匹配。从一开始,W3和其他互操作就以其语言为核心。对于其他语言,这些关注只是在不断加深,给他们带来了许多挑战。另外,如果您要使用多种语言和/或协议进行
互操作,

5
嗨,JoeGeeky,添加您的评论作为问题的答案
Anthony Mastrean 2011年

1
真正的问题是:出于什么原因,我应该选择Nemerle,F *和F#而不是C#?(即,所有三种语言都来自MS,并且所有三种语言都更好)
mrsteve

我真的不认为任何类型的陈述“与语言/平台Y相比,语言/平台X总是更好”,我也认为,对于任何X和Y,在某些情况下都可以轻易使其无效。这个问题有什么意义?
Shivan Dragon

Answers:


76

问题应该是“哪种语言更适合现代的典型应用程序开发?”。

编辑:我解决了下面的一些评论。一句话:考虑一下,当您有很多本来就是习语的东西时,与每次自己实现或下载并使用它们有很大的不同。几乎所有内容都可以使用这些语言中的任何一种来实现。问题是-语言本身为您提供了什么。

所以,让我烦恼不已(有些论点适用于两种语言)...

C#比C ++更好:

  • 它具有本机 垃圾收集。
  • 它允许您将类方法的签名视为自由函数(即忽略静态类型的this指针参数),从而在类之间创建更动态和灵活的关系。如果您不知道这意味着什么,请进行编辑,然后尝试分配一个返回void并接受void到void (*ptr)()变量的成员方法。C#委托随身携带了this指针,但是用户不必总是在乎这一点。他们可以将void()任何类的方法分配给任何其他void()委托。
  • 它有一个巨大的标准库,其中包含许多有用的东西,它们易于实施且易于使用。
  • 它允许托管代码块和本机代码块。
  • 程序集版本控制可以轻松解决DLL地狱问题。
  • 您可以将类,方法和字段设置为程序集内部的(这意味着可以在声明它们的DLL中的任何位置访问它们,但不能从其他程序集访问它们)。

C#比Java更好:

  • 您会得到很多优雅而友好的本机结构(例如,Properties和Events),而不会产生很多干扰(EJB,私有静态类实现等)。
  • 您拥有真正的泛型(不是Java称为泛型的坏笑话),您可以对它们进行反射。
  • 它支持本地资源管理习惯用法(该using语句)。Java 7也将支持此功能,但是C#拥有更长的时间。
  • 它没有检查过的异常:)(这是好是坏,值得商bat)
  • 如果您要的话,它与Windows紧密集成。
  • 它具有Lambdas和LINQ,因此支持少量的功能编程。
  • 它明确允许通用协方差和逆方差。
  • 如果需要,它具有动态变量。
  • yield声明更好的枚举支持。
  • 它允许您定义新的值(或非引用)类型。

编辑-解决评论

  • 我不是说C ++不支持本地RAII。我说过Java没有它(您必须显式地进行尝试/最后)。C ++具有自动指针,非常适合RAII,并且(如果您知道自己在做什么)也可以代替垃圾收集。
  • 我没有说关于模拟自由功能的任何事情。但是,例如,如果您需要通过this指针访问字段,并将执行该方法的方法绑定到通用函数指针(即不在同一类中),则根本没有本机方法。在C#中,您可以免费获得。您甚至不必知道其工作原理。
  • 通过“将成员方法作为自由函数进行处理”,我的意思是,例如,您不能将成员方法本地绑定到自由函数签名,因为成员方法“秘密地”需要this指针。
  • using声明以及IDisposable包装器显然是RAII的一个很好的例子。请参阅此链接。考虑到您拥有C,在C#中不需要在C#中像在C ++中那样需要RAII。在确实需要的特定时间,可以显式使用该using语句。另一个提醒:释放内存是一个昂贵的过程。在很多情况下(尤其是当您有大量内存时),GC都有其性能优势。内存不会泄漏,您也不会在重新分配上花费大量时间。而且,分配也更快,因为您不会每次都分配内存,只是偶尔一次。调用new只是增加了最后一个对象指针。
  • “ C#更糟糕的是它具有垃圾回收”。这确实是主观的,但是正如我在顶部所述,对于大多数现代的典型应用程序开发,垃圾回收是一大优势。
    在C ++中,您的选择是使用new和手动管理您的内存delete,根据经验,这总是会在这里和那里导致错误,或者(对于C ++ 11)您可以本机使用自动指针,但请记住,它们会增加很多代码的噪音。因此,GC仍然有优势。
  • “泛型比模板弱得多”-我只是不知道您从哪里得到的。模板可能有其优势,但以我的经验来看,通用参数类型检查,逆方差和协方差是更强大,更优雅的工具。模板的优势在于,它们使您可以使用某种语言,这可能很酷,但是在您想要调试某些东西时也会引起很多麻烦。因此,总而言之,模板具有其不错的功能,但是我发现泛型更加实用和简洁。

5
而且,如果您仍然想要C ++的垃圾收集器,则可以下载一个
fredoverflow 2011年


6
由于性能原因,与Java相比,C#的另一个重要功能是“结构”,它是一种对象类型,可以存储在堆栈中(在特殊情况下,也可以存储在CPU寄存器中)或嵌入其他堆对象中。它们通常用于具有1-4个字段的小型对象,例如X,Y坐标对。
Qwertie 2011年

2
@LokiAstari介意解释吗?只要您记得取消注册事件处理程序并在包含本机包装的类上使用Dispose模式,就可以了。与C ++中的内存管理相比,这要少得多。
Yam Marcovic

2
-1,因为我缺少“ C ++优于C#...”和“ Java优于C#...”部分。我认为C#在所有领域都没有优势,因此没有这两部分的答案可能缺少一些重要信息。
Giorgio

30

环境

.NET Framework和Windows客户端

Windows是客户端计算机上的主要操作系统。Windows应用程序的最佳GUI框架是Winforms和WPF以及.NET Framework。与.NET Framework及其API 配合使用的最佳编程语言是C#。Java不能替代它。C ++是一种较旧的语言,没有自动内存管理。C#与C ++相似,但是具有自动内存管理功能,您不必使用指针,这可以提高工作效率。在某些情况下,C ++仍然是最佳选择,但对于企业中常见的格式密集型数据库应用程序却不是。

IIS和Windows Server

如果您习惯于在Windows环境中使用C#,那么您将需要最少的投资来学习用于服务器编程的IIS和用于基本管理的Windows Server。

Active Directory和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 ++是一个不错的选择。


3
绝对-这就是为什么我没有真正使用C#的原因
-Murph

您当然可以通过Mono,MonoTouch和MonoDroid在其他平台上使用.NET,但我的基准测试发现Mono的速度明显比Windows的.NET慢,并且Microsoft自己的Compact Framework在Windows CE上的速度极其慢:codeproject.com/KB/cross -platform / BenchmarkCppVsDotNet.aspx ...当然,WPF仅在Windows上可用(但我还是不喜欢它。)
Qwertie 2011年

您的意思是哪一个依赖关系:“如果我不会有太多依赖关系,我会选择C ++用于嵌入式系统。” 您是说Java库吗?
Puckl 2012年

@Puckl是的,但主要是jvm / jre。
乔纳斯(Jonas)2012年

“如果您在使用Web服务的Unix环境中工作”,则可以考虑其他一些语言和框架:ruby,Python,node.js等
MarkJ 2013年

15

C#和Java

如果满足以下条件,C#是一种非常好的语言:

  • 您想进行通用的面向对象的开发。这是一种经典的静态类型的OOP语言。
  • 您仅针对Microsoft平台(值得记住的是,Microsoft有效地克隆了Java来创建C#,因为他们希望使用类似Java的语言将人们锁定在Windows中。他们本来可以使用Java,但是那将使人们能够轻松地在Windows上运行应用程序其他平台...。)

C#作为一种语言在各种方面都比Java更好(属性,值类型,统一泛型等的更好语法)。与Java相比,我更喜欢C#作为一种语言,但从总体上看,它们是相当相似的语言,适用于相似的应用程序。

另一方面,Java也具有一些很大的优点:

  • 庞大的开源生态系统- 到目前为止,您可以免费获得的Java库是所有语言中最好的。很难夸大其重要性-从完成工作的角度来看,Java非常有效。
  • 工具-我认为Java工具要比.Net更好。例如,Maven(一旦您掌握了它!)尤其令人印象深刻。
  • 可维护性-Java已经存在了一段时间,并且在大公司中取得了成功,这恰恰是因为Java相对稳定,并且在向后兼容性方面付出了很多努力。简单且稍微冗长的语法在这里也对Java有所帮助-如果代码非常清晰明了,则更易于阅读和维护代码。
  • 新语言-JVM具有一些令人惊奇的新语言(Scala,Clojure,Groovy等),它们是Java平台的未来。这是许多语言创新发生的地方,并且比Java或C#发生的速度都快得多。

因此,Java vs. C#是一个非常接近的称呼,它的确取决于您是想参加Microsoft阵营还是开放源代码/跨平台阵营。

就个人而言,我更喜欢Java,因为:

  • 在我看来,库生态系统比C#具有比Java更好的语法这一事实更为重要。
  • 从长远来看,我希望我的所有代码都能正确地跨平台运行,并能够在云上廉价的大型Linux计算机集群上运行。
  • Clojure是IMHO目前世界上最有前途的语言,如果我坚持使用JVM平台,那么随着时间的推移,我将能够轻松地将我的代码和技能转换为Clojure。

C / C ++

C / C ++基本上完全是另一种野兽。由于以下原因,我现在建议将其用于通用应用程序开发:

  • 内存管理-对于当今的大多数通用编程,您不想管理自己的内存。与您必须在C / C ++中使用的任何显式内存管理技术相比,使用C#或Java进行垃圾回收对于提高工作效率和保持健康性要好得多。
  • 复杂性-C ++特别是一种极其复杂的语言。掌握时间很长,代码本身也可能非常复杂。(例如,C ++模板特别有毛。。。)
  • 生产力-在大多数情况下,在所有其他方面都相等的情况下,用C / C ++完成工作将需要花费更长的时间。

但是,在某些特定领域中,无疑是一个不错的选择,尤其是:

  • 操作系统-如果要编写操作系统,则可能要使用C / C ++。
  • 游戏开发-几乎所有最好的商业游戏引擎都是C / C ++。如果您正在开发要求苛刻的AAA游戏,它仍然是最佳选择(C#和Java非常适合要求不高的休闲游戏)
  • 高性能计算-优化的C / C ++可能是创建非常高性能的代码的最佳方法。对于大多数应用程序来说,进行这种级别的优化是不值得的,但是在某些领域中它可能是非常有价值的(例如,高频交易)
  • 硬件访问-您需要直接访问硬件(例如,对于嵌入式系统)

因此,从根本上讲,C / C ++是且仅当您专注于特别适合它的领域之一时,它才是一个不错的选择。


1
您提到了maven作为Java更好工具的示例。我不是特别熟悉它,但是在阅读文档时,Maven看起来与本地.Net生成工具MSBuild相似。是什么使Maven优于MSBuild?
凯文·卡斯卡特

1
+!(仅因为我只有一票):您已经很好地解释了为什么Java生态系统更好,为什么人们不应该只比较C#与Java的语法。Java具有更多更好的库和工具。Java语言本身并没有发生太多事情,但是对于JVM来说,新出现的非常有趣的语言(IMO)比C#有趣得多。我不了解Clojure,但我发现Scala非常有趣:从一开始就被设计为OOP + FP。
乔治

2
为什么每个人都认为C ++代码充满了手动内存管理。它不是C,您知道RAII意味着您几乎不必手动分配/释放内存(您要做的就是那些像C#这样的语言对您来说毫无用处的时间)。
gbjbaanb 2012年

3
@gbjbaanb-可能是因为RAII不足以进行通用内存管理。就像在Java或C#中看到的那样,它的灵活性绝不等同于完整的GC系统。一旦超出RAII的范围,您就回到了手动内存管理领域。
mikera

3
@mikera只是要指出,.NET平台上也有相当多的语言开发。例如,F#是一种精巧的功能语言,可以平滑地集成.NET的其余部分,最近,Python作为Iron Python移植到了.NET上(并且也有了不错的IDE!)。
ikh

13
I heard that syntactically they are almost the same.

语法上?谁给猴子讲语法?语法仅对一件事有好处:允许从语法相似的语言更快地迁移。而已。

C#比Java更好。考虑它们的通用和功能编程支持-C#领先于Java。更不用说运算符重载,以及其他好东西-C#的功能要好得多。不可能将Java比C#更好。

C ++和C#更像是一场竞赛。C ++具有令人讨厌的古老编译模型和来自C的许多遗留疾病,但是它的模板比泛型强大得多,并且它的资源管理方法通常更灵活,更强大,就像using完全失败一样,并且可以执行快点。


6
我认为应该比较两种语言的功能以及在不同平台上某种语言的可用性。使用C#可以与Microsoft结合在一起,而使用Java则不能:这是一个很大的优势,至少对于UNIX / Linux开发人员而言。OOP + FP是很酷的功能,但是如果您可以使用在JVM上运行并且可以与旧版Java代码进行交互的Scala,为什么还要为C#烦恼呢?除非被迫,否则我永远不会学习特定于平台的语言。
乔治

2
@乔治:Mono项目确实存在。但是第二,微软实际上是在照顾他们的平台-他们会定期对其进行大型升级。Java几乎没有什么新东西。另外,问题是关于C#与Java,而不是CLR与JVM。
DeadMG 2011年

4
@DeadMG:据我所知,我无法使用Windows开发的任何C#程序并使用Mono进行构建。不是CLR vs JVM?问题是人们为什么使用C#或Java。为了使人们使用一种语言,他们需要运行时和操作系统。我没有讨论C#比Java具有更多功能这一事实,但是Java具有更大的可移植性:这是可能影响语言采用的因素。实际上,即使缺少某些高级功能,Java仍然比C#更加常用。
乔治

3
@Giorgio,您可以使用任何C#程序并使用Mono进行构建。您不能使用某些库(无论如何它们都不是C#语言的一部分)。而且Java并不是“更具可移植性”。例如,您可以使用C#为iOS编写代码,但不能以Java编写代码。
SK-logic

2
@ Giogio,Mono至少与JVM一样可移植。
SK-logic

7

好吧,它C#具有一些不错的内置功能,例如LINQ和委托。它正从两个世界最好的- JavaC++。看看这里为全面的比较。

但是我更喜欢这个Java世界-更多的开源框架,它可以在每个平台上运行。而且不要告诉我Mono-这不是一个可靠的选择。


9
+1:“但是我更喜欢Java世界-更多的开源框架,它可以在每个平台上运行。” 让我们希望Oracle不会改变这一点!
乔治

15
请注意,单声道中不可靠的是什么?
SK-logic

2
@Petar Minchev,这只是你自己的错。您必须遵循可移植性准则,并且不应该使用不可移植的库-这样,任何复杂的应用程序都可以通过Mono可靠地运行。WPF之类的东西将永远不会移植。
SK-logic

2
@Petar Minchev,那里有很多不可移植的Java库。无论使用哪种语言,您都必须始终对可移植性保持谨慎。而且无论如何,问题在于语言,而不是第三方库。
SK-logic

3
@Petar Minchev,GTK#是可移植的。改用它。
SK-logic

3

根据一些消息来源(请参阅例如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#,因为它不仅是功能丰富的语言,而且还是一项不错的投资。


“我不能在Linux上全面使用C#”-您能详细说明一下吗?您是说没有完整的.Net框架,因为在Linux上C#语言本身(或F#)还没有遇到任何问题吗?
Wesley Wiser

@wawa:据我所知,.Net框架与JDK相对应,.Net框架仅可用于Windows,而JDK可用于多个OS。如果这是不正确的,我可以编辑我的答案(也可以更改我的意见)。
乔治

1
我认为可以比喻为JDK的基类库。BCL具有标准化和非标准化的零件。mono项目执行标准化以及许多非标准化的部分。
Wesley Wiser

@wawa:谢谢您提供的信息。我正在考虑尝试使用Mono的C#。但是,我仍然有一种很强烈的感觉,即C#与Microsoft的联系比与Java与Oracle(或过去的Sun)的联系要牢固得多。
Giorgio

3

那么“哪个软件开发框架包括编程语言”更好呢?

您忘记了包含其他内容,例如将要使用的“环境”。

  1. 您是否仅要在Windows OS上工作,但是不必太低级,也没有很多内存和其他资源?

    选择.NET作为Windows上的框架,并使用C#。

  2. 您是否仅要在Windows上工作,但是不必低级,但是,它没有很多资源?

    选择Delphi框架(以及Object Pascal Delphi编程语言或Lazarus Object Pascal编程语言)

  3. 是您的应用。需要在不同的手机上支持多个平台(例如游戏)?

    选择Java框架和Java编程语言。

  4. 是使用KDE作为图形界面的Linux吗?

    使用C ++选择QT框架

  5. 是使用Gnome作为图形界面的Linux吗?

    使用C ++选择GObject / GLib框架

  6. 您是否要处理许多低级操作,例如开发驱动程序?

    Plain C或C ++用于几个带有标准库的操作系统,并以此为框架。

只是我的2美分。


1
我不确定3.智能手机在今天和AFAIK中非常流行,它们都以某种形式支持C#,但是只有Android支持Java。
svick 2011年

德尔斐不死吗?:)
šljaker

@šljaker不,但是,这些日子不是很受欢迎。
umlcat 2011年

1
@svick:那是骗人的。除了Android外,Java还以某种形式存在于iOS,Symbian,WinMo,Blackberry,Maemo和WebOS上(即,任何重要的事情或仍然重要的事情;不要让我开始使用更小的平台)。Android,Blackberry和Symbian 正式支持Java作为开发选项。Sun曾经在iOS上支持Java,即使Apple不喜欢它。Java是Android和Blackberry手机中的主要开发语言。我不能对C#和AFAICT说同样的话,它仅在WinMo上得到正式支持。
Lie Ryan

1

如果您进行搜索,您可能会偶然发现关于顶级编程语言的讨论。这是搜索结果之一-http ://www.tiobe.com/index.php/content/paperinfo/tpci/index.html-Java似乎仍然是最受欢迎的语言。

Java试图消除C ++的一些缺点(并使程序员在非实时和非关键应用程序中的生活更简单)。C#是聚会的后来者,避免了Java语言的某些缺点。C#取得了很大的进步(由于Microsoft对它有很多控制权),而Java的进步由于其利益相关者之间的冲突而被阻止了相当长的一段时间。


1

还没有提到的几件事:

C#比C ++更好,因为:

它消除了头文件,从而简化了工作。

C#比Java更好,因为:

它支持引用类型(类)和值类型(结构)用户定义的类型,如果您知道自己在做什么,则可以带来显着的性能优势。

它支持类似于单方法接口的委托,从而大大简化了涉及单方法对象的频繁出现的构造的编码。


您能否解释在C#中同时拥有引用类型和值类型的哪种方式可以带来性能优势?
Giorgio

例如,如果您想要一个记录数组,那么在Java中您别无选择,只能使用一个类来描述您的记录,因此您的数组将是对多个单独分配的对象的引用的数组。在C#中,你可以使用一个结构描述你的记录,所以你的阵列将包含存储您的结构一前一后只是一个单一连续的区域,就像在C.
麦克Nakis

再举一个例子,如果您想定义一个小的新类型(一种适合机器字的类型),则不必为其定义一个新类。您可以简单地使其成为一个结构,因此它将遵循值语义。传递这样的结构不会比传递对对象的引用更昂贵,但是您将受益于不分配,构造和垃圾收集任何对象。
Mike Nakis 2012年

我明白。因此,类在堆上实例化并通过引用进行访问,而结构在堆栈上实例化(?)
Giorgio

几乎正确。此语句中唯一的不准确性是,如果将结构嵌入到另一个对象中,或者将其放置在结构数组中,则会在堆上找到该结构。如果将其装箱,也将在堆中找到它,其方式与用Java将值类型装箱的方式完全相同。
Mike Nakis'1

1

您应该为预期的环境和专业知识选择最佳的语言。

如果您在仅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-两者目前都可以销售。


0

关于C ++与C#(因为我对Java不够熟练),我在这里缺少的是在Windows上访问低级内容的能力。例如,您还不能使用C#开发本机显示驱动程序,但是可以使用C ++。这不会使C ++更好。我将C ++与C#视为汇编与C。

如果您查看实际实现功能所需的时间,我认为C#效率更高。.Net运行时的性能损失对于所开发的99%的应用程序而言可以忽略不计。如果您正在运行一个紧密的循环,那么这可能很重要,可以肯定,但是在大多数情况下,应用程序处于空闲状态,等待任何类型的输入,信号或中断(磁盘IO,按钮单击,网络,动画完成) 。

具有所有功能的CLR库还有另一个很大的好处。当我向初级开发人员培训C#时,大多数人说他们喜欢类,成员和名称空间的逻辑命名约定。在整个SDK中找到方法的功能是合乎逻辑的,而Visual Basic 5则存在严重缺陷。这极大地帮助了他们采用图书馆。在学习了一种语言的语法之后,学习一个新的库对于掌握任何SDK都是很重要的。它使您免于重新发明轮子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.