2010-01-11 9 views

Antwort

39

Die Common Language Runtime oder CLR. Dies ist die Laufzeit, die nicht nur C#, sondern auch andere .NET-Sprachen wie Visual Basic.NET unterstützt. In der Regel stellt jede Sprache den Entwicklern eine Teilmenge der Funktionen zur Verfügung, die in der CLR verfügbar sind (z. B. wird das Überladen von Methoden rein durch den Rückgabetyp in C# im Allgemeinen nicht unterstützt, wird jedoch von der CLR unterstützt).

So wie Java zu Bytecode kompiliert wird, kompilieren C# und andere .NET-Sprachen zu Microsoft Intermediate Language (MSIL) - der einzigen Sprache, die den gesamten Satz von CLR-Funktionen verfügbar macht.

Natürlich ist C# defined purely as a language. Es gibt keinen Grund, warum es nicht gemacht werden kann, um auf anderen Laufzeiten oder tatsächlich in einem interpretierten Modus zu laufen. Aber das "Äquivalent" der "JVM" (impliziert die Standard-JVM) ist die CLR.

+1

Das stimmt nicht. Sie brauchen die CLR nicht, um C# -Code auszuführen, * irgendeine * CLI-kompatible Laufzeitumgebung reicht aus. Außerdem kompilieren nicht alle Implementierungen von C# zu MSIL, tatsächlich glaube ich, dass die meisten zu CIL und einige zu nativem Code kompilieren. Tatsächlich sind nicht alle Implementierungen von C# überhaupt * kompiliert, ich glaube, dass es mindestens einen Interpreter gibt. –

+3

Nein, meine Antwort ist wahr, die andere nicht. Dies ist die Standardlaufzeit für C#, da die JVM für Java ist. Ich habe nicht wirklich gesagt, dass Sie die CLR haben müssen, um C# -Code auszuführen - das war nicht die Frage. –

+0

+1 Ihr Kommentar übrigens ist natürlich völlig korrekt abgesehen davon ... –

4

Sie benötigen Common Language Runtime (CLR), um C# -Anwendungen ausführen zu können.

+0

Die Art und Weise, wie dies formuliert ist, ist nicht * strikt * wahr - siehe Jörgs Kommentar zu meiner Antwort und meinem Schnitt. –

1

Es gibt kein .NET-Äquivalent zur JVM, da .NET nicht wie Java in einer virtualisierten Sandbox ausgeführt wird.

Java: Quelle> Java Bytecode> Wird von JVM für bestimmte Plattformen kompiliert.

.NET: Quelle> MSIL> Wurde beim ersten Ausführen der MSIL-Assemblierung mit systemeigenem Code kompiliert.

So kann .NET-Code in MSIL kompiliert werden, in eine andere Maschinenarchitektur verschoben werden und solange etwas (wie Mono) diese MSIL lesen und zu Maschinencode kompilieren kann, wird es funktionieren. Mit Java wird der Code immer innerhalb der JVM sandboxed ausgeführt.

Java und .NET haben ähnliche Architekturen, aber sie sind auch in anderer Hinsicht sehr unterschiedlich. In diesem Fall spricht Java die Plattformabhängigkeit an, indem eine einzige universelle virtuelle Plattform definiert wird, auf der der gesamte Java-Code ausgeführt wird, während .NET stattdessen seine Sprache und Bibliotheken als plattformunabhängig definiert.

Mit Java sind die einzigen Personen, die eine JVM auf einer bestimmten Plattform anbieten können, Oracle/Sun/Java. Mit .NET kann jeder entscheiden, ob eine Version der CLR in Teilen oder auf einer Plattform implementiert werden soll.

Verwandte Themen