Что такое ошибка компиляции (Compilation error) в C#?

«Что такое ошибка компиляции (Compilation error) в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ошибка компиляции (Compile-time error) — это ошибка, которую обнаруживает и сообщает компилятор C# (например, Roslyn) до создания исполняемого файла (.exe или .dll). Программа с такими ошибками не может быть собрана и запущена. Это контрастирует с ошибками времени выполнения (Runtime exceptions), которые возникают уже при работе скомпилированной программы.

Ошибки компиляции возникают из-за нарушения правил языка C# и делятся на основные категории:

  1. Синтаксические ошибки: Нарушение базового синтаксиса языка.

    int x = 10 // CS1002: Ожидается ;
    if (true) { // CS1513: Ожидается }
  2. Семантические ошибки: Код синтаксически корректен, но не имеет смысла в контексте системы типов C#.

    string text = 42; // CS0029: Не удается неявно преобразовать тип 'int' в 'string'
    int y = "hello"; // Аналогичная ошибка несоответствия типов
  3. Ошибки неопределенности: Использование необъявленных идентификаторов.

    Console.WriteLine(unknownVariable); // CS0103: Имя 'unknownVariable' не существует в текущем контексте
  4. Ошибки доступа: Нарушение правил доступности членов класса (private, protected, etc.).

    class MyClass { private int _field; }
    // ... в другом месте
    var obj = new MyClass();
    int value = obj._field; // CS0122: Поле 'MyClass._field' недоступно из-за его уровня защиты

Почему это важно: Компилятор выступает в роли первого и самого строгого тестировщика. Его ошибки с четкими кодами (например, CS0168) и указанием строки позволяют быстро находить и исправлять проблемы на самом раннем этапе, гарантируя, что в собранную программу не попадет заведомо некорректный код.