Was genau ist "verwalteter" Code?
Ich habe das schreiben von C /C++ - code für fast zwanzig Jahre, und ich weiß, Perl, Python, PHP und etwas Java auch, und ich unterrichte mich selbst JavaScript. Ich habe aber noch nie getan .NET -, VB-oder C# - Zeug. Was genau macht verwaltet code bedeuten?
Wikipedia es beschreibt einfach als
Code, der ausgeführt wird, unter die Verwaltung einer virtuellen Maschine
, und es sagt ausdrücklich, dass Java (in der Regel) managed-code, so
- warum wird der Begriff nur scheinen gelten für C# /.NET?
- Können Sie kompilieren von C# in einer .exe-Datei, die enthält die VM-als auch, oder haben Sie Verpacken es und geben es an ein anderes .exe (a la java)?
In einer ähnlichen Vene,
- ist .NET Sprache oder eine Rahmen, und was genau bedeutet "Rahmen" hier bedeuten?
OK, das ist also mehr als eine Frage, aber für jemanden, der das in der Branche so lange wie ich, ich fühle mich eher N00B-ish jetzt...
Kommentar zu dem Problem - Öffnen
Brad Adams hat die Beste Erklärung, die ich gelesen habe
mögliche Duplikate von Was ist managed/unmanaged code in C#?
InformationsquelleAutor der Frage Graeme Perrow | 2008-09-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim kompilieren von C# - code ein .exe, es kompiliert wird Common Intermediate Language(CIL) - bytecode. Wenn Sie führen Sie eine CIL executable ausgeführt wird auf Microsofts Common Language Runtime(CLR) ist die virtuelle Maschine. Also Nein, es ist nicht möglich die VM innerhalb Ihrer .NET ausführbare Datei. Sie müssen die .NET-runtime installiert auf jedem client-Rechner, wo das Programm ausgeführt wird.
Zur Beantwortung Ihrer zweiten Frage .NET ist ein framework, d.h. es ist ein Satz von Bibliotheken, Compiler und VM, die nicht sprachspezifisch. So können Sie den code auf der .NET framework in C#, VB, C++ und andere Sprachen, die haben eine .NET-compiler.
https://bitbucket.org/brianritchie/wiki/wiki/.NET%20Languages
Die obige Seite hat eine Auflistung der Sprachen, die haben .NET-Versionen sowie links zu Ihren Seiten.
InformationsquelleAutor der Antwort lnediger
Ich glaube nicht, dass du allein verwirrt über das, was .Netto ist. Gibt es schon andere Antworten, sollte Sie abgedeckt, aber ich werde werfen diese Leckerbissen der Informationen für andere.
Um zu sehen, was .Net "wirklich" ist, gehen Sie einfach auf c:\Windows\Microsoft.Net\Framework
Dort sehen Sie die Ordner, die sind spezifisch für die version(en), das Sie installiert haben. Gehen Sie in der v2.0.xxxxx-Ordner, wenn Sie es installiert haben, zum Beispiel.
In diesem Ordner ist der Rahmen. Sie wird grundsätzlich auf eine ganze Reihe von .exe-Dateien und .dll-Dateien. Alle DLL-Dateien, die beginnen mit dem System.*.dll ist im wesentlichen der .Net-framework.
Den .exe-Dateien sehen Sie in diesem Ordner Dienstprogramme für Entwickler als auch als Compiler. Sie erwähnte C#. Finden Sie die csc.exe Datei. Das ist der C# - compiler.
Erstellung eines Programms ist wirklich einfach. Werfen Sie den folgenden code in eine Hallo.cs-Datei.
Dann auf der Befehlszeile> csc hello.cs
Generieren Sie ein .exe-Datei. Starten Sie es und es wird ausspucken 'Hallo Welt' offensichtlich.
Die Zeile besagt, dass die Konsole.WriteLine() ist der Aufruf in den Rahmen. Konsole ist ein Objekt, das Leben in den System-namespace und WriteLine() ist eine statische Methode.
Dies ist die demontierten code für die Konsole.WriteLine () - Methode:
Wenn die Leute sagen Dinge wie, "Soll ich PHP benutzen oder .Net?", oder "Sollte ich verwenden, Python oder .Net", die Sie beginnen, zu sehen, wie die falsche Sache zu diskutieren. Sie sind offensichtlich den Vergleich zwischen einer Sprache zum Rahmen. C# ist eine Sprache und es ist nur eine der vielen Sprachen, die verwendet werden können, code zu schreiben, der oben auf der .Net-Plattform. Dass die gleiche Methode von Console.WriteLine () - Aufruf aus C#, VB.Net Pascal, C++, Ruby, Python, F# und anderen Sprachen, die gemacht wurde, um Arbeit auf die .Net-Plattform.
Ich hoffe, das hilft.
-Keith
InformationsquelleAutor der Antwort Keith Elder
Es ist in Erster Linie verwendet, um zu beschreiben .NET, weil der Begriff Microsoft entschied sich zu differenzieren .NET C/C++ und andere ältere Sprachen. Microsoft wählte es, weil es war nicht ein Begriff, war in der Regel im Zusammenhang mit Java, weil Sie nicht wollen, betonen die ähnlichkeiten zwischen C#/.NET und Java (im Gegensatz zu nannte es so etwas wie "virtual machine code", die Sie klingen viel mehr wie Java). Grundsätzlich ist die Verwendung von "managed code" ist marketing-getrieben, eher als technisch getrieben, Terminologie.
InformationsquelleAutor der Antwort Chris Upchurch
Meistens bezog sich auf die Tatsache, dass alle Ihre Speicher-Zuweisungen sind "verwaltete" für Sie. Wenn Sie die Verwendung von verwaltetem code, die Sie nicht haben, um über sorgen zu befreien, Ihre Objekte, wenn Sie fertig sind mit Ihnen. Einfach erlauben, dass Sie außerhalb des Bereichs bedeutet, dass die VM irgendwann erkennen, dass es nicht mehr alle Verweise auf diese und Müll sammeln Sie die Rücksendung der Arbeitsspeicher des Systems zu.
Nicht verwalteten code, der auf der anderen Seite dann einfach "Auslaufen", es sei denn, Sie explizit frei Zeigern, bevor Sie verwerfen die Referenzen.
InformationsquelleAutor der Antwort Vagnerr
Unter .NET und Visual C++ - spezifisch, Sie können sowohl Unmanaged und Managed code. Die Begriffe beziehen sich auf die Art und Weise, in denen Speicher zugewiesen ist und 'verwaltet'.
Unmanaged code würde der C++ - Sachen, die Sie gewohnt sind. Dynamische Speicherzuweisung und explizite Freigabe von Speicher. Die .NET-runtime verwaltet nicht die Erinnerung für Euch, damit 'unmanaged'.
Verwalteten code, der auf der anderen Seite WIRD verwaltet von run-time. Sie reserviert Speicher, wo erforderlich (durch das deklarieren von Variablen, nicht Speicher) und die run-time garbage collector bestimmt, wenn es nicht mehr benötigt und reinigt es alle. Der garbage collector wird auch bewegen Sie den Speicher um die Effizienz zu verbessern. Die run-time 'verwaltet' alles für Sie.
Wie ich oben erwähnt, ist es möglich, code zu schreiben, der sowohl verwaltete und nicht verwaltete.
Unmanaged:
Verwaltet:
Beachten Sie die ref? Dass ziemlich viel bezeichnet eine Verwaltete Klasse. Es wird sehr verwirrend, wenn man die Mischung der zwei Arten von code jedoch. Zum Beispiel, Sie möchten, speichern Sie einen Verweis Zeiger, (^) der verwalteten entspricht einem Zeiger auf ein Bild-Steuerelement in Ihrem unmanaged Klasse. Da der garbage collector kann sich bewegen-Speicher um, wenn Sie das nächste mal versuchen, Sie zu dereferenzieren der Bild-box kann nicht gefunden werden. Der run-time, nicht sagen, Ihre nicht verwalteten code über seinem Speicher verpasst.
Deshalb Sie brauchen, um pin-auf das verwaltete Objekt im Speicher zu, dass Ihr nicht verwaltetem code zu verfolgen. Dann gibt ' s unboxing und alle möglichen anderen Macken, mit denen Sie vermischen die beiden. Code-Komplexität ist enorm!
Offiziell, managed/unmanaged kommen könnte, um die Art und Weise code führt auf dem .NET stack. Allerdings, wenn Sie aus einer c++ - hintergrund, ich hoffe, dies wird ein wenig mehr für Sie relevant sind.
InformationsquelleAutor der Antwort Josh Smeaton
Managed bedeutet, dass der code nicht in systemeigenen code kompiliert, und somit läuft das unter der Federführung einer virtuellen Maschine. Java wird kompiliert, um ein intermediate-format namens bytecode, der Java-VM weiß, wie zu interpretieren und auszuführen. Alle .NET-Sprachen haben eine ähnliche Sache, die Zusammenstellung der IL (intermediate language), die die .NET-runtime interpretiert. Es ist ein wenig verwirrend, weil die .NETTO-IL haben .dll-und .exe Datei-Endungen.
InformationsquelleAutor der Antwort jodonnell
Den Begriff verwaltet ist in der Regel nur angewendet, zu .NET, weil Microsoft verwendet den Begriff. Microsoft in der Regel nicht verwenden den Begriff "virtuelle Maschine" bezieht sich auf einen .NET managed execution environment.
.NET "bytecode" (IL) ist etwas anders als der Java-bytecode in, es wurde explizit entwickelt, um kompiliert werden, in nativen code vor der Ausführung in der verwalteten Umgebung, in der Erwägung, dass Java wurde entwickelt, um interpretiert werden, aber das Konzept der Plattform-unabhängigen code ist ähnlich.
".NET Framework" ist im Grunde eine riesige Sammlung von Bibliotheken zur Verfügung gestellt von Microsoft, mit tausenden von Klassen, die verwendet werden können, um Anwendungen zu entwickeln.
Einer kompilierten C# .exe-Datei enthält die Plattform-unabhängigen code, der ausgeführt werden kann .NET-kompatible Umgebung, einschließlich Mono. Aber die Laufzeit ist in der Regel einzeln von Anwendungen, die es verwenden.
InformationsquelleAutor der Antwort Kristopher Johnson
Auf die Gefahr hin zu beleidigen einige, vermute ich, dass das Wort verwaltete verwendet wurde, so könnte Sie das Wort nicht verwaltete, anstatt zusammengestellt. Zwar verwaltet, kann mehr bedeuten, die Realität ist, es scheint zu sein, die zur Unterscheidung meist zwischen dem, was ist ziemlich viel gerade in der Zeit der Kompilierung (als Ersatz für das, was man einmal interpretiert oder P-Code), und nativer code.
Oder anders ausgedrückt, was würden Sie bevorzugen:
a) nicht verwaltetem code, die dies können Unkontrollierbare Dinge dem system.
b) Nativer code, der ist schnell, stabil und ist in der Nähe des OS.
Natürlich, Sie sind tatsächlich die gleiche Sache.
InformationsquelleAutor der Antwort David L Morris
.NET ist Microsofts aktuellen enterprise-software-Plattform. Es besteht aus:
• Eine einzige, Universelle Schnittstelle für den Zugriff auf Windows-Funktionalität:
• Eine einzige, Universelle Sprache und Laufzeitumgebung für die Ausführung .NET-Anwendungen:
• Die Auswahl mehrerer Sprachen für die Entwicklung .NET-Anwendungen:
InformationsquelleAutor der Antwort RoadWarrior
.NET ist ein framework. Die Common language Runtime (CLR) ausgeführt wird, die Microsoft Intermediate Language (MSIL) - code, der generiert wird, wenn eine Lösung kompiliert ist (d.h., es nicht kompiliert zu Maschinencode). Sie können nicht enthalten die API in der exe-Datei, noch würde Sie wollen, da es Recht groß ist. Der große Vorteil hier ist das memory-management (unter anderem Sicherheit, Vorteile und möglicherweise andere, die ich nicht kennen.)
InformationsquelleAutor der Antwort Ed S.
Kann ich Sie beantworten die framework-Frage. .NET ist ein framework, C#, VB.NET etc sind Sprachen. Im Grunde ist .NET bietet eine gemeinsame Plattform für Bibliotheken zu nennen (Alle im System.... dlls), die jede Sprache verwenden .NET aufrufen können. Alle .NET Sprachen sind zusammengestellt in MSIL (Microsoft Intermediate Language, besser bekannt als nur IL), die dann auf jedem PC mit der entsprechenden .NET framework installiert ist.
InformationsquelleAutor der Antwort Glenn Slaven
.NET ist ein framework.
Es kann verwendet werden, aus vielen Sprachen (VB.NET, C#, IronPython, boo, etc)
.NET wird immer als " interpretiert, und Nein, Sie darf nicht die 'VM' innerhalb der .exe. Jeder Benutzer wollen, um laufen Ihre .NETTO-app muss das framework installiert.
InformationsquelleAutor der Antwort GEOCHET
Er kann sich auf kein code ausgeführt, der von einer virtuellen Maschine und nicht direkt von der CPU.
Ich denke, das können Dinge wie garbage-collection und überprüfung von array-Grenzen.
InformationsquelleAutor der Antwort
Persönlich, ich glaube, das Wort "Rahmen" ist ein wenig irreführend.
.NET ist eine "Plattform", bestehend aus einem execution environment (CLR virtuellen Maschine) und eine Reihe von Bibliotheken. Es ist genau Analog zu Java oder Perl oder Python (von denen keiner jemals bezeichnet als "frameworks").
In den meisten Fällen, ist das Wort "framework" für Projekte wie Spring oder Struts oder QT, die sitzen oben auf einer Plattform (dh, keine execution environment), wie z.B. einer Bibliothek.
Aber im Gegensatz zu einer "Bibliothek", ein framework sucht zu re-definieren Sie die grundlegenden Operationen des zugrunde liegenden Plattform. (Spring ' s dependency injection trotzt der Konstruktor-Aufruf der Logik von normalen Java-code. QT, Signale und slots, die Umsetzung entzieht sich der normalen C++ - code.)
Ich weiß, ich bin einfach nur ein pedantisch bastard, aber für mich .NET ist ein Rahmen. Es ist eine Plattform.
InformationsquelleAutor der Antwort benjismith
Verwalteten Code--MSIL und IL und Verwaltetem Code sind gleich.Wenn wir bauen unsere Anwendung .dll-oder .exe-Dateien sind, erzeugt im Bin-Ordner.Diese Dateien aufgerufen werden, die als Managed code.Später werden diese Dateien gegeben CLR zum generieren von Systemeigenem code, die verstanden werden, die von OS.
InformationsquelleAutor der Antwort Abhi