Frage

Ich schreibe seit fast zwanzig Jahren C-/C++-Code, kenne mich mit Perl, Python, PHP und etwas Java aus und bringe mir selbst JavaScript bei.Aber ich habe noch nie irgendwelche .NET-, VB- oder C#-Sachen gemacht.Was genau bewirkt gelang es Code bedeuten?

Wikipedia beschreibt es einfach als

Code, der unter der Verwaltung einer virtuellen Maschine ausgeführt wird

und es heißt ausdrücklich, dass es sich bei Java (normalerweise) um verwalteten Code handelt

  • Warum scheint der Begriff nur für C# / .NET zu gelten?
  • Können Sie C# in eine EXE-Datei kompilieren, die auch die VM enthält, oder müssen Sie es packen und an eine andere EXE-Datei (a la Java) weitergeben?

In ähnlicher Weise,

  • ist .NET ein Sprache oder ein Rahmen, und was genau bedeutet hier „Rahmen“?

OK, das ist mehr als eine Frage, aber für jemanden, der schon so lange in der Branche tätig ist wie ich, fühle ich mich im Moment eher N00B-mäßig …

War es hilfreich?

Lösung

Wenn Sie C#-Code in eine EXE-Datei kompilieren, wird er in den Common Intermediate Language (CIL)-Bytecode kompiliert.Wann immer Sie eine ausführbare CIL-Datei ausführen, wird diese auf der virtuellen Maschine Common Language Runtime (CLR) von Microsoft ausgeführt.Nein, es ist nicht möglich, die VM in Ihre ausführbare .NET-Datei einzubinden.Auf allen Clientcomputern, auf denen Ihr Programm ausgeführt wird, muss die .NET-Laufzeitumgebung installiert sein.

Um Ihre zweite Frage zu beantworten: .NET ist ein Framework, das aus einer Reihe von Bibliotheken, Compilern und VMs besteht, die nicht sprachspezifisch sind.Sie können also auf dem .NET-Framework in C#, VB, C++ und allen anderen Sprachen programmieren, die über einen .NET-Compiler verfügen.

https://bitbucket.org/brianritchie/wiki/wiki/.NET%20Languages

Die obige Seite enthält eine Liste der Sprachen, die über .NET-Versionen verfügen, sowie Links zu ihren Seiten.

Andere Tipps

Meist seiner sich auf die Tatsache, dass alle Ihre Speicherzuordnungen werden „verwaltet“ für Sie. Wenn Sie verwalteten Code verwenden Sie müssen zu befreien, Ihre Objekte keine Sorge, wenn Sie mit ihnen fertig sind. Einfach so dass sie bedeuten, den Gültigkeitsbereich zu gehen, dass die VM wird schließlich erkennen, dass es nicht mehr sind alle Verweise auf sie und Willen Müll sammeln sie auf das System den Speicher zurück.

Unmanaged Code auf der anderen Seite wird einfach „Leck“, wenn Sie Ihre Zeiger explizit frei vor verwerfen Sie die Referenzen.

Ich glaube nicht, dass Sie allein sind in sein verwirrt darüber, was .Net ist. Es gibt bereits andere Antworten, die Sie zurückgelegt haben sollte, aber ich werde für andere diese Leckerbissen von Informationen werfen.

Um zu sehen, was .Net "wirklich" einfach zu c gehen: \ Windows \ Microsoft.Net \ Framework

Dort werden Sie Ordner sehen, die die Version specfic sind (s) Sie installiert haben. Gehen Sie in den v2.0.xxxxx Ordner, wenn Sie es zum Beispiel installiert haben.

In diesem Ordner ist der Rahmen. Sie werden im Grunde ein Bündel von EXE-Dateien und DLL-Dateien sehen. All DLL-Dateien, die mit dem System starten. *. Dll ist im Wesentlichen der .Net-Framework.

Die EXE-Dateien, die Sie in diesem Ordner sehen werden sind Dienstprogramme für Entwickler sowie Compiler. Sie haben erwähnt, C #. Finden Sie die csc.exe Datei. Das ist Ihre C # Compiler.

ein Programm zu bauen ist wirklich einfach. Werfen Sie den folgenden Code in eine hello.cs Datei.

using System;
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello world");
        }
    }

Dann auf der Kommandozeile type> csc hello.cs

Das wird Sie eine EXE-Datei erzeugen. Führen Sie es, und es wird ausspucken ‚Hallo Welt‘ offenbar.

Die Zeile, die sagt Console.WriteLine () ruft in den Rahmen. Konsole ist ein Objekt, das innerhalb des System-Namensraum und Writeline lebt () ist eine statische Methode.

Dies ist der demontierten Code für die Console.WriteLine () Methode:

[HostProtection(SecurityAction.LinkDemand, UI=true)]
public static void WriteLine(string value)
{
    Out.WriteLine(value);
}

Wenn die Leute sagen Dinge wie: „Soll ich PHP oder .NET?“ Oder „Soll ich Python oder .Net“ Sie beginnen zu sehen, wie das ist die falsche Sache zu diskutieren sein. Sie sind zu vergleichen offensichtlich eine Sprache zu einem Framework. C # ist eine Sprache, und es ist nur eine der vielen Sprachen, die verwendet werden können, Code oben auf der .NET-Plattform zu schreiben. Das gleiche Verfahren von Console.WriteLine () von C #, VB.Net, Pascal, C ++, Ruby, Python, fis und jeder anderen Sprache aufgerufen werden, die gemacht wurde, oben auf der .NET-Plattform zu arbeiten.

Ich hoffe, das hilft.

-Keith

Es ist in erster Linie .NET zu beschreiben, weil das der Begriff Microsoft .NET gewählt aus C / C ++ und anderen älteren Sprachen zu unterscheiden. Microsoft wählte es, weil es nicht ein Begriff war, die in der Regel mit Java verbunden war, weil sie nicht die Ähnlichkeiten zwischen C # /. NET und Java betonen wollte (im Gegensatz es so etwas wie ‚virtuellen Maschinencode‘ zu nennen, die es machen würde klingt viel mehr Java dergleichen). Grundsätzlich ist die Verwendung von „Managed Code“ ist Marketing angetrieben, anstatt technisch getrieben, Terminologie.

Unter .NET und Visual C ++ speziell, können Sie sowohl Unmanaged und Managed Code. Die Begriffe beziehen sich auf die Art und Weise, in dem Speicher zugewiesen wird und ‚verwaltet‘.

Unmanaged Code wäre die C ++ Sachen, die Sie gewohnt sind. Dynamische Speicherzuweisung und explizite Freigabe des Speichers. Die .NET-Laufzeit nicht gelingt, den Speicher für Sie, also ‚unmanaged‘.

Managed Code auf der anderen Seite wird durch die Laufzeit verwaltet. Sie weisen Speicher, wo erforderlich (Variablen, indem er erklärt, nicht Speicherplatz) und die Laufzeit Garbage Collector bestimmt, wenn es nicht mehr benötigt wird und reinigt sie alle auf. Der Garbage Collector wird auch Speicher bewegt Effizienz zu verbessern. Die Laufzeit ‚verwaltet‘ alles für Sie.

Wie ich bereits erwähnt, ist es möglich, Code zu schreiben, die beide verwaltet wird und nicht verwaltete.

Nicht verwaltet:

class Bar : public Foo {
    private:
            int fubar;
    public:
            Bar(int i) : fubar(i) {}
            int * getFubar() { return * fubar; }
}

Verwaltete:

public ref class Bar :  public Foo
    private:
            int fubar;
    public:
            Bar(int i) : fubar(i) {}
            int ^ getFubar() { return ^ fubar; }
}

den Referee Hinweis? Das ist ziemlich viel bezeichnet eine Managed-Klasse. Es wird sehr verwirrend, wenn man die beiden Arten von Code jedoch mischen. Zum Beispiel möchten Sie zu einem Bildfeld-Steuerelement in Ihrem nicht verwalteten Klasse einen Referenzzeiger, (^) das verwaltete Äquivalent eines Zeigers, speichern. Da die Garbage Collector Speicher um, das nächste Mal bewegen kann versuchen, Sie zu dereferenzieren dem Bildfeld kann nicht gefunden werden. Die Laufzeit nicht Ihren nicht verwalteten Code erzählen Speicher Änderungen ist.

Daher müssen Sie das verwaltete Objekt im Speicher festzunageln Ihrem nicht verwalteten Code zu ermöglichen Überblick zu behalten. Dann gibt es Unboxing und alle anderen Arten von Macken, die Ihnen erlauben, die beiden zu vermischen. Code Komplexität ist enorm!

Offiziell verwaltet / unmanaged auf den Weg kommen könnte Code auf dem .NET-Stack ausführt. Wenn Sie jedoch sind aus einem C ++ Hintergrund kommen, ich hoffe, das wird ein wenig mehr relevant für Sie sein.

bedeutet Managed dass der Code nicht zu nativen Code kompiliert wird, und somit läuft unter der Schirmherrschaft von einer virtuellen Maschine. Java kompiliert in ein Zwischenformat namens Bytecode, der die Java VM weiß, wie zu interpretieren und auszuführen. Alle .NET-Sprachen machen eine ähnliche Sache, Kompilieren zu IL (Intermediate Language), die die .NET-Laufzeit interpretiert. Es ist ein wenig verwirrend, weil die .NET IL DLL und EXE-Datei Endungen haben.

Der Begriff verwaltet im Allgemeinen nur auf .NET angewandt wird, da Microsoft den Begriff verwendet. Microsoft hat verwendet in der Regel nicht den Begriff „virtuelle Maschine“ in Bezug auf eine Ausführungsumgebung .NET verwaltet werden.

.NET die „Bytecode“ (IL) ist etwas anders als Java-Bytecode, dass es explizit in nativen Code kompiliert zu werden, wurde entwickelt, um vor der Ausführung in der verwalteten Umgebung, während Java entwickelt wurde interpretiert werden, aber das Konzept der Plattform -unabhängigen Code ist ähnlich.

Der „.NET Framework“ ist im Grunde eine riesige Menge von Bibliotheken, die von Microsoft zur Verfügung gestellt, Tausende von Klassen enthält, die verwendet werden können, um Anwendungen zu entwickeln.

Eine kompilierte C # .exe enthält plattformunabhängigen Code, der in einem beliebigen .NET-kompatibelen Umgebung ausgeführt werden kann, einschließlich Mono. Allerdings ist die Laufzeit im Allgemeinen getrennt von Anwendungen verteilt, die sie verwenden.

Auf die Gefahr etwas zu beleidigen, ich vermute, dass das Wort verwaltet verwendet wurde, so dass sie das Wort nicht verwalteten statt kompiliert nutzen könnten. Während mehr verwaltet bedeuten kann, ist die Realität, es scheint, die verwendet zu werden, zu unterscheiden zwischen dem, was meist ziemlich viel gerade in der Zeit (als Ersatz für das, was man einmal interpretiert oder pcode) Kompilieren und nativen Code kompiliert.

Oder anders gesagt, die würden Sie verwenden möchten:

a) Unmanaged Code, der an das System unkontrollierbare Dinge tun kann.

b) nativen Code kompiliert, die schnell, fest und in der Nähe des OS.

Natürlich sind sie eigentlich das gleiche.

  
    

In ähnlicher Weise wird eine Sprache oder ein Framework .NET und was genau bedeutet „Rahmen“ bedeutet hier? <<

  

NET ist aktuelle Enterprise-Software-Plattform von Microsoft. Es besteht aus:

• Eine einzige universelle Schnittstelle für den Zugriff auf Windows-Funktionen:

o The .NET Framework Class Library (FCL).
o The FCL provides a rich set of high-level functionality for developers.

• Eine einzige universelle Sprache und Laufzeit für die Ausführung von .NET-Anwendungen:

o Common Language Runtime (CLR) executes Common Intermediate Language (CIL).
o The CLR is God: it runs, controls, and polices everything.

• Die Auswahl mehrerer Sprachen für die Entwicklung von .NET-Anwendungen:

o Every development language is compiled to CIL, which is run by the CLR.
o C# and VB are the two main development languages.

.NET ist ein Framework. Die Common Language Runtime (CLR) führt den Microsoft Intermediate Language (MSIL) Code, der erzeugt wird, wenn eine Lösung kompiliert wird (das heißt, es ist nicht in Maschinencode nicht kompiliert). Sie können nicht die API innerhalb der exe enthalten, noch würden Sie wollen, da es recht groß ist. Der große Vorteil hier ist die Speicherverwaltung (unter einigen anderen Sicherheitsvorteile und möglicherweise andere, die ich weiß nicht, über.)

Ich kann den Rahmen Frage beantworten. .NET ist ein Framework, C #, VB.NET, etc. sind Sprachen. Grundsätzlich bietet .NET eine gemeinsame Plattform von Bibliotheken zu nennen (alle System .... DLLs), dass jede Sprache mit .NET aufrufen können. Alle .NET-Sprachen kompiliert werden in MSIL (Microsoft Intermediate Language, besser bekannt als nur IL), die dann mit der entsprechenden .NET Framework installiert auf jedem PC ausgeführt werden.

.NET ist ein Framework. Es kann aus vielen Sprachen (VB.NET, C #, Ironpython, boo, etc)

verwendet werden

.NET führt immer so interpretiert, und nicht Sie die ‚VM‘ nicht enthalten kann innerhalb der Exe. Jeder Benutzer, der Ihren .NET-App ausgeführt wird, muss hat das Framework installiert ist.

Es kann von einer virtuellen Maschine ausgeführt beliebigen Code bezieht und nicht direkt von der CPU.

Ich denke, dies ermöglicht Dinge wie Garbage Collection und Längenprüfung.

Ich persönlich denke, das Wort „Rahmen“ ist ein wenig irreführend.

.NET ist eine „Plattform“, bestehend aus einer Ausführungsumgebung (CLR virtuelle Maschine) und eine Reihe von Bibliotheken. Es ist genau analog zu Java oder Perl oder Python (von denen keiner jemals als „Rahmen“ bezeichnet).

In den meisten Fällen wird das Wort „Rahmen“ für Projekte wie Spring verwendet oder Struts oder QT, die auf einer Plattform sitzen (dh keine Ausführungsumgebung des eigenen Providing) wie eine Bibliothek.

Aber im Gegensatz zu einer „Bibliothek“, ein Rahmen soll die grundlegenden Operationen der zugrunde liegenden Plattform neu zu definieren. (Spring Dependency Injection trotzt die Konstruktor-Aufruf Logik des gewöhnlichen Java-Code. Qt-Signale-und-Slots Implementierung trotzt gewöhnlichen C ++ Code.)

Ich weiß, ich bin nur ein pedantischer Bastard zu sein, aber zu mir, .NET ist kein Rahmen. Es ist eine Plattform.

verwaltetem Code - MSIL und IL und verwaltetem Code sind same.When wir bauen unsere Anwendung die DLL oder EXE-Dateien werden in dem Bin erzeugt folder.These Dateien aufgerufen werden als Managed code.Later diese Dateien in CLR gegeben native Code zu erzeugen, die von OS verstanden würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top