Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “究竟是什么?”;管理的;密码? 我写了C/C++代码已经有将近二十年了,我知道Perl、Python、PHP和一些java,我正在教自己JavaScript。但我从未做过任何.NET、VB或C的东西。管理的代码的确切含义是什么_C#_.net_Vb.net_Managed Code - Fatal编程技术网

C# “究竟是什么?”;管理的;密码? 我写了C/C++代码已经有将近二十年了,我知道Perl、Python、PHP和一些java,我正在教自己JavaScript。但我从未做过任何.NET、VB或C的东西。管理的代码的确切含义是什么

C# “究竟是什么?”;管理的;密码? 我写了C/C++代码已经有将近二十年了,我知道Perl、Python、PHP和一些java,我正在教自己JavaScript。但我从未做过任何.NET、VB或C的东西。管理的代码的确切含义是什么,c#,.net,vb.net,managed-code,C#,.net,Vb.net,Managed Code,维基百科只是 在虚拟机管理下执行的代码 它特别指出Java(通常)是托管代码,所以 为什么这个词似乎只适用于C#/.NET? 你能把C#编译成一个包含虚拟机的.exe吗,或者你必须把它打包并交给另一个.exe(一个java)吗? 同样地 .NET是一种语言还是一个框架,这里的“框架”到底是什么意思? 好的,这不仅仅是一个问题,但对于像我一样在这个行业工作了这么久的人来说,我现在觉得自己有点不对劲…….NET是一个框架。 它可以从多种语言(VB.NET、C#、IronPython、boo等

维基百科只是

在虚拟机管理下执行的代码

它特别指出Java(通常)是托管代码,所以

  • 为什么这个词似乎只适用于C#/.NET?
  • 你能把C#编译成一个包含虚拟机的.exe吗,或者你必须把它打包并交给另一个.exe(一个java)吗?
同样地

  • .NET是一种语言还是一个框架,这里的“框架”到底是什么意思?
好的,这不仅仅是一个问题,但对于像我一样在这个行业工作了这么久的人来说,我现在觉得自己有点不对劲……

.NET是一个框架。 它可以从多种语言(VB.NET、C#、IronPython、boo等)中使用

.NET始终按解释的方式执行,不允许在.exe中包含“VM”。任何希望运行.NET应用程序的用户都必须安装框架。

术语“管理”通常仅适用于.NET,因为Microsoft使用该术语。Microsoft通常不会在.NET托管执行环境中使用术语“虚拟机”

.NET的“字节码”(IL)与Java字节码有些不同,因为它被明确设计为在托管环境中执行之前编译为本机代码,而Java被设计为进行解释,但与平台无关的代码的概念是类似的

.NET Framework基本上是由Microsoft提供的一组庞大的库,包含数千个可用于开发应用程序的类


编译的C#.exe包含独立于平台的代码,可以在任何与.NET兼容的环境中运行,包括Mono。但是,运行时通常与使用它的应用程序分开分发。

它主要用于描述.NET,因为这是Microsoft选择用来区分.NET与C/C++和其他较旧语言的术语。微软之所以选择它,是因为它不是一个通常与Java相关联的术语,因为他们不想强调C#/.NET和Java之间的相似性(而不是将其称为“虚拟机代码”,这会让它听起来更像Java)。基本上,“托管代码”的使用是市场驱动的,而不是技术驱动的术语。

.NET是一个框架。公共语言运行库(CLR)执行编译解决方案时生成的Microsoft中间语言(MSIL)代码(即,它不编译为机器代码)。您不能在exe中包含API,也不希望包含API,因为它非常大。这里的主要好处是内存管理(还有其他一些安全优势,可能还有我不知道的其他优势)。

我可以回答框架问题。NET是框架,C#,VB.NET等是语言。基本上,.NET提供了一个通用的库平台来调用任何使用.NET的语言都可以调用的(所有系统….DLL)。所有.NET语言都被编译成MSIL(Microsoft中间语言,更好地称为IL),然后可以在安装了相应的.NET framework的任何PC上运行。

托管意味着代码不会编译为本机代码,因此在虚拟机的支持下运行。Java编译成一种称为字节码的中间格式,Java虚拟机知道如何解释和执行字节码。所有的.NET语言都做类似的事情,编译为.NET运行时解释的IL(中间语言)。这有点令人困惑,因为.NET IL有.dll和.exe文件结尾

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

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

将C#代码编译为.exe时,它将编译为公共中间语言(CIL)字节码。无论何时运行CIL可执行文件,它都会在Microsofts公共语言运行时(CLR)虚拟机上执行。因此,不可能在.NET可执行文件中包含VM。必须在运行程序的任何客户端计算机上安装.NET运行时

回答第二个问题,.NET是一个框架,因为它是一组库、编译器和虚拟机,它们不是特定于语言的。因此,您可以在.NET、Framework、VB、C++和任何其他具有.NET编译器的语言中编写.NET框架代码。p>


上面的页面列出了具有.NET版本的语言及其页面链接。

它可以引用虚拟机执行的任何代码,而不是直接由CPU执行的代码


我认为这可以实现垃圾收集和数组边界检查等功能。

冒着冒犯某些人的风险,我怀疑使用了managed这个词,这样他们就可以使用unmanaged这个词而不是compiled。虽然托管可能意味着更多,但现实情况是,它似乎主要用于区分几乎是即时编译的代码(作为对曾经解释过的代码或pcode的替代)和本机编译代码

或者换一种方式,您更愿意使用哪种方式:

a) 非托管代码,可能对系统造成无法控制的影响

b) 本机编译代码,速度快、可靠且接近操作系统

c的
class Bar : public Foo {
    private:
            int fubar;
    public:
            Bar(int i) : fubar(i) {}
            int * getFubar() { return * fubar; }
}
public ref class Bar :  public Foo
    private:
            int fubar;
    public:
            Bar(int i) : fubar(i) {}
            int ^ getFubar() { return ^ fubar; }
}
o The .NET Framework Class Library (FCL).
o The FCL provides a rich set of high-level functionality for developers.
o Common Language Runtime (CLR) executes Common Intermediate Language (CIL).
o The CLR is God: it runs, controls, and polices everything.
o Every development language is compiled to CIL, which is run by the CLR.
o C# and VB are the two main development languages.
using System;
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello world");
        }
    }
[HostProtection(SecurityAction.LinkDemand, UI=true)]
public static void WriteLine(string value)
{
    Out.WriteLine(value);
}