首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是“托管”代码?

什么是“托管”代码?
EN

Stack Overflow用户
提问于 2008-09-11 23:38:58
回答 15查看 25K关注 0票数 57

我已经写C/ C++代码将近20年了,我知道Perl、Python、PHP和一些Java,我还在自学JavaScript。但是我从来没有做过任何.NET,VB,或者C#之类的东西。托管代码到底是什么意思?

维基百科describes it简单地说是

在虚拟机管理下执行的

代码

它特别说明了Java (通常)是托管代码,所以

  • why这个术语似乎只适用于.NET?
  • Can / java)?

您是将C#编译为也包含虚拟机的.exe,还是必须将其打包并将其提供给另一个.exe (类似于#en2#

以类似的方式,

  • is here?

.NET a language or a framework以及here?到底是什么意思?

好吧,这不只是一个问题,但对于像我一样在这个行业工作了很长时间的人来说,我现在感觉有点不合时宜……

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 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版本的语言,以及指向其页面的链接。

票数 38
EN

Stack Overflow用户

发布于 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文件中。

代码语言:javascript
复制
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()方法的反汇编代码:

代码语言:javascript
复制
[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

票数 13
EN

Stack Overflow用户

发布于 2008-09-11 23:46:42

它主要指的是你所有的内存分配都是为你“管理”的。如果您使用的是托管代码,则不必担心在使用完对象后释放这些对象。简单地允许它们超出作用域将意味着VM最终将识别出不再有任何对它们的引用,并且将对它们进行垃圾收集,将内存返回给系统。

另一方面,非托管代码只会“泄漏”,除非您在丢弃引用之前显式释放指针。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档