我已经写C/ C++代码将近20年了,我知道Perl、Python、PHP和一些Java,我还在自学JavaScript。但是我从来没有做过任何.NET,VB,或者C#之类的东西。托管代码到底是什么意思?
维基百科describes it简单地说是
在虚拟机管理下执行的
代码
它特别说明了Java (通常)是托管代码,所以
您是将C#编译为也包含虚拟机的.exe,还是必须将其打包并将其提供给另一个.exe (类似于#en2#
以类似的方式,
.NET a language or a framework以及here?到底是什么意思?
好吧,这不只是一个问题,但对于像我一样在这个行业工作了很长时间的人来说,我现在感觉有点不合时宜……
发布于 2008-09-11 23:47:33
当您将C#代码编译为.exe时,它将编译为通用中间语言(CIL字节码)。每当运行CIL可执行文件时,都会在Microsofts公共语言运行时(CLR)虚拟机上执行该文件。所以,不可能在你的.NET可执行文件中包含虚拟机。您必须在要运行程序的任何客户端计算机上安装.NET运行时。
回答你的第二个问题,.NET是一个框架,因为它是一组不特定于语言的库、编译器和VM。因此,您可以在.NET框架上使用C#、VB、C++和任何其他具有.NET编译器的语言编写代码。
https://bitbucket.org/brianritchie/wiki/wiki/.NET%20Languages
上面的页面列出了具有.NET版本的语言,以及指向其页面的链接。
发布于 2008-09-20 13:45:18
我不认为你是唯一一个对.Net是什么感到困惑的人。已经有其他答案可以让你了解,但我将把这一点信息抛给其他人。
要查看.Net“真正”是什么,只需转到c:\Windows\Microsoft.Net\Framework
在那里你会看到特定于你已经安装的版本的文件夹。例如,如果您已经安装了v2.0.xxxxx文件夹,请进入该文件夹。
在该文件夹中是框架。你基本上会看到一堆.exe文件和.dll文件。所有以System.*.dll开头的DLL文件本质上都是.Net框架。
您将在该文件夹中看到的.exe文件是开发人员和编译器的实用程序。你提到了C#。找到csc.exe文件。这就是你的C#编译器。
构建一个程序真的很简单。将以下代码放入hello.cs文件中。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("hello world");
}
}
然后在命令行type> csc hello.cs上
这将为您生成一个.exe文件。运行它,它显然会吐出“hello world”。
显示Console.WriteLine()的代码行正在调用框架。Console是一个驻留在System名称空间中的对象,而WriteLine()是一个静态方法。
下面是该Console.WriteLine()方法的反汇编代码:
[HostProtection(SecurityAction.LinkDemand, UI=true)]
public static void WriteLine(string value)
{
Out.WriteLine(value);
}
当人们说“我应该使用PHP还是.Net?",或者”我应该使用Python还是.Net“时,你就会发现讨论这件事是错误的。他们显然是在将一种语言比作框架。C#是一种语言,它只是众多可用于在.Net平台上编写代码的语言之一。同样的Console.WriteLine()方法可以从C#、VB.Net、Pascal、C++、Ruby、F#和任何其他在.Net平台上工作的语言中调用。
我希望这能有所帮助。
-Keith
发布于 2008-09-11 23:46:42
它主要指的是你所有的内存分配都是为你“管理”的。如果您使用的是托管代码,则不必担心在使用完对象后释放这些对象。简单地允许它们超出作用域将意味着VM最终将识别出不再有任何对它们的引用,并且将对它们进行垃圾收集,将内存返回给系统。
另一方面,非托管代码只会“泄漏”,除非您在丢弃引用之前显式释放指针。
https://stackoverflow.com/questions/57923
复制相似问题