当我第一次看到C#时,我认为这一定是个笑话。我开始用C语言编程。但是在C#中你可以拖放对象,然后只为它们编写事件代码。这很简单。
现在,我仍然最喜欢C,因为我对基本的低级操作非常感兴趣,C只是下一级汇编程序,几乎没有基本的例程,所以我非常喜欢它。甚至更多是因为我为微控制器编写了很少的应用程序。
但昨天我在asm中为基于微控制器的LED立方体编写了非常简单的控制程序,我需要一些方法来简单地为Cube创建动画序列。所以,我记得C#。我几乎没有C#技能,但我仍然创建了简单的程序,用GUI在大约一小时内完成动画序列,只需谷歌的帮助和C#中嵌入的功能描述的帮助。
所以,为了达到这一点,除了C#之外还有其他一些原因可以使用其他语言吗?我的意思是,它是如此有效。我知道Java有点类似,但我希望C#更直接来自Microsoft,因为它更有效。
第二个问题是,编译成CIL,而不是运行CLR比直接将其编译成机器代码有什么好处?我知道可移植性是一个,但由于C#主要用于Windows,直接编译它不会更强大吗?感谢。
答案 0 :(得分:10)
1 - 差异语言各有利弊。有一系列语言(功能,动态,静态等)对特定问题域更好。您需要在每个家庭中学习一个,以了解何时选择哪一个。例如写一个简单的脚本,我会选择Ruby over C#
2 - 将其编译为CIL:可移植性可能不是什么大问题......但准确地说,Mono在Linux上实现了CLR。所以那里。此外,CIL可帮助您在CLR上运行的语言之间进行混合和匹配。例如IronRuby可以访问用C#编写的标准框架库。它还使CLR能够利用运行程序的实际硬件(例如,打开优化,使用特定指令)。两台机器上的CLR将为相应的机器生成来自相同IL的最佳本机代码。
答案 1 :(得分:5)
语言和平台选择是项目目标的一个功能。听起来你喜欢系统级编程,这是使用C / C ++的优点之一。因此,如果您喜欢这样的话,请继续编写系统级代码。
在快速业务应用程序开发中,使用C#编写代码非常有用,因为目标本质上是不同的。更快地编写好的工作代码在工时和上市时间都是值得的。微软为我们提供了一种富有表现力的语言和强大的功能框架,这使我们无法为95%的业务需求编写低级代码或工具。
答案 2 :(得分:5)
IL的一个重要优势是语言独立性。您可以在项目中定义应该在C ++中完成的模块,一些在C#中完成,一些在VB.net中。编译时所有这些项目都给出了相应的程序集(.dll / .exe)。这可以在c#one中使用C ++项目的程序集,反之亦然。这是可能的,因为..无论您选择哪种语言(.net支持)..都编译为相同的IL代码。
答案 3 :(得分:2)
我不确定C#是否更有效,因为它是Microsoft产品。如果您使用Visual Studio或其他RAD,则会自动生成某些代码,有时效率会降低。几年前,我是一个教条主义者,认为只有C可以回应我们所有的祈祷:-P,但现在我认为虚拟机可以在执行它之前优化代码(如RDBMS)方面有很多帮助,存储在caché件中稍后执行的代码等。包括像Terracotta那样创建虚拟机“集群”的可能性。至少具有额外抽象层的好处更大,没有它。
答案 4 :(得分:1)
我同意斯波尔森。 C#非常擅长解决业务问题。您可以非常有效地创建一个框架来模拟业务流程,并通过面向对象和设计模式解决许多问题。在这方面,它提供了C ++具有的很好的面向对象功能。
如果你关注速度,那么C就是你说的原因。
答案 5 :(得分:1)
关于第二个问题:您可以运行NGEN来生成程序集的本机映像,这可以提高性能。不是机器代码,但由于它绕过JIT(即时编译)阶段,应用程序将更快地运行。
http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx
原生图像生成器(Ngen.exe) 是一个改善的工具 托管应用程序的性能。 Ngen.exe创建本机映像 是包含已编译的文件 特定于处理器的机器代码,以及 将它们安装到本机映像中 缓存在本地计算机上。该 运行时可以使用来自的本机映像 缓存而不是使用 即时(JIT)编译器进行编译 原装配。
答案 6 :(得分:1)
“还有其他原因吗? 速度,使用任何其他语言比 C#?“
我能想到至少四个,都有点相关:
“编译的优点是什么? 进入CIL,而不是由CLR运行 直接将其编译成机器 码?“
所有这些都是为了让运行时环境能够更好地控制代码的执行方式。如果你编译成机器代码,那么很多时候就会变成“一成不变”。将编译推迟到机器代码,直到您了解有关运行时环境的更多信息,这样您就可以以其他方式进行优化。只有几个我的头顶:
答案 7 :(得分:0)
第一个答案:默认情况下,C#应该用于新项目。在某些情况下,它还没有赶上C ++(就多方式支持而言),但它正朝着这个方向发展。
第二个答案:“可移植性”还包括x86 / x64可移植性,可以通过将平台设置为AnyCPU来实现。另一个(在这一点上更理论化)的优点是JIT编译器可以利用特定于CPU的指令集,从而更有效地进行优化。