Глиф Учебники

Чем C# отличается от C++ и Java

Справочник · C# · 2 минуты чтения

Все три языка — с похожим синтаксисом: фигурные скобки, ; в конце команд, if, for, while, классы. Отличаются они тем, как программа выполняется, как устроена работа с памятью и где их чаще применяют.

C#JavaC++
АвторMicrosoft, первая версия 2002Sun Microsystems (сейчас Oracle), 1995Бьёрн Страуструп, с 1983
Во что компилируетсяв промежуточный код для среды .NETв байт-код для виртуальной машины Java (JVM)сразу в машинный код
Памятьосвобождает сборщик мусораосвобождает сборщик мусораосвобождает программист (или «умные» указатели)
Указателитолько в особом режиме unsafeнетесть, используются постоянно
Наследование классоводин базовый класс + интерфейсыодин базовый класс + интерфейсынесколько базовых классов
Вывод строкиConsole.WriteLine("Hi");System.out.println("Hi");std::cout << "Hi\n";

Промежуточный код (в Java его называют байт-кодом) — команды не для процессора, а для среды выполнения: в машинный код их переводит .NET или JVM прямо во время работы. Сборщик мусора — часть среды выполнения, которая сама освобождает память, когда объект больше никому не нужен.

C# и Java

Языки очень похожи: оба со сборкой мусора, оба строго объектно-ориентированные, оба компилируются в промежуточный код. Перейти с одного на другой обычно несложно. Главные отличия C#:

C# и C++

C++ даёт полный контроль над памятью и железом: программа работает без среды выполнения и может быть очень быстрой. Цена — сложность: память выделяют и освобождают сами, ошибка с указателем может тихо испортить данные или обрушить программу. В C# за памятью следит сборщик мусора, выход за границы массива сразу даёт понятную ошибку IndexOutOfRangeException, а не случайный результат.

В C++ есть заголовочные файлы, шаблоны, множественное наследование и препроцессор (обработка строк с # до компиляции). В C# ничего этого нет или оно устроено проще: файлы .cs подключать друг к другу не нужно, обобщённые типы — типы с параметром, вроде List<T> для элементов любого типа T, — работают без шаблонов.

Где что применяют

Что выбрать для учёбы

Основы — переменные, условия, циклы, функции, классы — во всех трёх почти одинаковы. После одного языка второй осваивается заметно быстрее: учить заново приходится не основы, а особенности.