Ответ
Эти ошибки возникают на разных этапах жизненного цикла программы и имеют разные причины и последствия.
Ошибка компиляции (Compilation Error)
- Когда возникает: На этапе компиляции, когда компилятор C# (например, Roslyn) преобразует исходный код в промежуточный язык (IL).
- Причина: Нарушение правил языка C#: синтаксические ошибки, несоответствие типов, отсутствие объявленных членов, нарушение правил области видимости.
- Последствие: Исполняемый файл (
.exe/.dll) не создаётся. Программа не может быть запущена. - Обнаружение: Компилятор явно указывает на ошибку с номером строки и описанием. Современные IDE (Visual Studio, Rider) подсвечивают их в реальном времени.
// Пример ошибки компиляции: несоответствие типов
int number = "Hello"; // CS0029: Cannot implicitly convert type 'string' to 'int'
// Пример: использование необъявленной переменной
Console.WriteLine(unknownVariable); // CS0103: The name 'unknownVariable' does not exist
Ошибка времени выполнения (Runtime Error)
- Когда возникает: Во время выполнения уже скомпилированной программы.
- Причина: Логические ошибки в программе или непредвиденные условия среды: деление на ноль, обращение к
null, выход за границы массива, недостаток памяти, ошибки ввода-вывода. - Последствие: Программа аварийно завершается (крашится) или выбрасывает исключение (Exception), которое может быть перехвачено и обработано.
- Обнаружение: Требует отладки (debugging), анализа стека вызовов и логирования.
// Пример ошибки времени выполнения: NullReferenceException
string text = null;
int length = text.Length; // System.NullReferenceException
// Пример: IndexOutOfRangeException
int[] numbers = { 1, 2, 3 };
int value = numbers[5]; // System.IndexOutOfRangeException
// Пример: DivideByZeroException
int a = 10, b = 0;
int result = a / b; // System.DivideByZeroException
| Сравнение в таблице: | Критерий | Ошибка компиляции | Ошибка времени выполнения |
|---|---|---|---|
| Время | При компиляции | При запуске программы | |
| Причина | Нарушение синтаксиса/правил C# | Логическая ошибка или внешний сбой | |
| Результат | Нет исполняемого файла | Исключение или краш программы | |
| Исправление | Обязательно, иначе код не запустится | Может быть обработано в try-catch |
Вывод: Ошибки компиляции — это «опечатки» языка, которые нужно исправить перед запуском. Ошибки времени выполнения — это логические дефекты программы, для поиска которых нужны тестирование и отладка.