C# 4.0: полное руководство | страница 25
Несмотря на всю полезность сообщений о синтаксических ошибках, выдаваемых компилятором, они иногда вводят в заблуждение. Ведь компилятор C# пытается извлечь какой-то смысл из исходного текста, как бы он ни был набран. Именно по этой причине ошибка, о которой сообщает компилятор, не всегда отражает настоящую причину возникшего затруднения. Неумышленный пропуск открывающей фигурной скобки после метода Main() в рассмотренном выше примере программы приводит к появлению приведенной ниже последовательности сообщений об ошибках при компиляции данной программы компилятором командной строки сsc. (Аналогичные ошибки появляются при компиляции в интегрированной среде разработки Visual Studio.)
>EX1.CS (12,21): ошибка CS1002: ; ожидалось
>EX1.CS(13,22): ошибка CS1519: Недопустимая лексема '(' в
>объявлении члена класса, структуры или интерфейса
>EX1.CS(15,1): ошибка CS1022: Требуется определение типа
>или пространства имен либо признак конца файла
Очевидно, что первое сообщение об ошибке нельзя считать верным, поскольку пропущена не точка с запятой, а фигурная скобка. Два других сообщения об ошибках вносят такую же путаницу.
Из всего изложенного выше следует, что если программа содержит синтаксическую ошибку, то сообщения компилятора не следует понимать буквально, поскольку они могут ввести в заблуждение. Для выявления истинной причины ошибки может потребоваться критический пересмотр сообщения об ошибке. Кроме того, полезно проанализировать несколько строк кода, предшествующих той строке, в которой обнаружена сообщаемая ошибка. Иногда об ошибке сообщается лишь через несколько строк после того места, где она действительно произошла.
Незначительное изменение программы
Несмотря на то что приведенная ниже строка указывается во всех примерах программ, рассматриваемых в этой книге, формально она не нужна.
>using System;
Тем не менее она указывается ради удобства. Эта строка не нужна потому, что в C# можно всегда полностью определить имя с помощью пространства имен, к которому оно принадлежит. Например, строку
>Console.WriteLine("Простая программа на С#.");
можно переписать следующим образом.
>System.Console.WriteLine("Простая программа на С#.");
Таким образом, первый пример программы можно видоизменить так.
>// В эту версию не включена строка "using System;".