2010-01-11 4 views

ответ

39

Common Language Runtime или CLR. Это среда выполнения, которая поддерживает не только C#, но и другие языки .NET, такие как Visual Basic.NET. Как правило, каждый язык предоставляет разработчикам подмножество функций, доступных в CLR (например, перегрузка метода исключительно с помощью типа возврата обычно не поддерживается в C#, но поддерживается CLR).

Так же, как Java компилируется в байт-код, C# и другие языки .NET скомпилируются на Microsoft Intermediate Language (MSIL) - единственный язык, который предоставляет полный набор функций CLR.

Конечно, C# defined purely as a language. Нет причин, по которым не может быть , сделанный для работы в других режимах работы, или даже в интерпретируемом режиме. Но «эквивалент» «JVM» (подразумевающий значение по умолчанию) - это CLR.

+1

Это неправда. Вы не нуждаетесь в CLR для запуска кода C#, * будет выполняться любая * CLI-совместимая среда выполнения. Кроме того, не все реализации C#, скомпилированные для MSIL, на самом деле я считаю, что большинство компилируется для CIL, а некоторые - для собственного кода. На самом деле, не все реализации C# компилируются * вообще *, я считаю, что есть хотя бы один интерпретатор. –

+3

Нет, мой ответ верен, другой - нет. Это стандартная среда выполнения для C#, поскольку JVM для Java. Я на самом деле не сказал, что вы должны иметь CLR для запуска кода C# - это не вопрос. –

+0

+1 Ваш комментарий, кстати, конечно же совершенно правильный, кроме этого ... –

4

Чтобы запустить приложения C#, для выполнения приложений C# вам необходимо иметь среду выполнения Common Language (CLR).

+0

Как это сформулировано, это не * строго * верно - см. Комментарий Йорга к моему ответу и мое редактирование. –

1

Существует нет .NET, эквивалентного JVM, так как .NET не запускается внутри виртуализованной изолированной среды, такой как Java.

Java: Source> Java Bytecode> Intepreted by JVM, скомпилированный для конкретной платформы.

. NET: Source> MSIL> Скомпилирован в собственный код при первом запуске сборки MSIL.

Таким образом, .NET-код может быть скомпилирован в MSIL, перенесен в другую архитектуру компьютера, и пока что-то (например, Mono) может читать MSIL и компилировать его в машинный код, он будет работать. С Java код всегда будет работать в изолированной среде внутри JVM.

Java и .NET имеют схожие архитектуры, но они также очень разные в других отношениях. В этом случае Java учитывает зависимость платформы, определяя единую универсальную виртуальную платформу, на которой работает весь Java-код, тогда как .NET вместо этого определяет свой язык и библиотеки как независимые от платформы.

С Java только люди, которые могут на законных основаниях предлагать JVM на определенной платформе, это Oracle/Sun/Java. С .NET любой может решить реализовать версию CLR по частям или в совокупности на данной платформе.