Эти строки образуют комментарий. Как и в большинстве других языков програм мирования, в C# допускается вводить комментарии в файл с исходным текстом про граммы. Содержимое комментария игнорируется компилятором. Но, с другой сторо ны, в комментарии дается краткое описание или пояснение работы программы для всех, кто читает ее исходный текст. В данном случае в комментарии дается описание программы и напоминание о том, что ее исходный файл называется Example.cs. Разумеется, в комментариях к реальным приложениям обычно поясняется работа от дельных частей программы или же функции конкретных средств.
В C# поддерживаются три стиля комментариев. Один из них приводится в самом начале программы и называется многострочным комментарием. Этот стиль коммен тария должен начинаться символами / и оканчиваться символами /. Все, что на ходится между этими символами, игнорируется компилятором. Как следует из его названия, многострочный комментарий может состоять из нескольких строк.
Рассмотрим следующую строку программы. using System;
Эта строка означает, что в программе используется пространство имен System. В C# пространство имен определяет область объявлений. Подробнее о пространстве имен речь пойдет далее в этой книге, а до тех пор поясним вкратце его назначение. Благодаря пространству имен одно множество имен отделяется от других. По суще ству, имена, объявляемые в одном пространстве имен, не вступают в конфликт с име нами, объявляемыми в другом пространстве имен. В анализируемой программе ис пользуется пространство имен System, которое зарезервировано для элементов, свя занных с библиотекой классов среды .NET Framework, применяемой в С#. Ключевое слово using просто констатирует тот факт, что в программе используются имена в за данном пространстве имен. (Попутно обратим внимание на весьма любопытную воз можность создавать собственные пространства имен, что особенно полезно для работы, над крупными проектами.)
Перейдем к следующей строке программы. class Example {
В этой строке ключевое слово class служит для объявления вновь определяемо го класса. Как упоминалось выше, класс является основной единицей инкапсуляции в С#, a Example — это имя класса. Определение класса начинается с открывающей фигурной скобки ({) и оканчивается закрывающей фигурной скобкой (}). Элементы, заключенные в эти фигурные скобки, являются членами класса. Не вдаваясь пока что в подробности, достаточно сказать, что в C# большая часть действий, выполняемых в программе, происходит именно в классе.
Следующая строка программы содержит однострочный комментарий. // Любая программа на C# начинается с вызова метода Main().
Это второй стиль комментариев, поддерживаемых в С#. Однострочный коммен тарий начинается и оканчивается символами //. Несмотря на различие стилей ком ментариев, программисты нередко пользуются многострочными комментариями для более длинных примечаний и однострочными комментариями для коротких, построч ных примечаний к программе. (Третий стиль комментариев, поддерживаемых в С#, применяется при создании документации и описывается в приложении А.) Перейдем к анализу следующей строки программы. static void Main() {
Эта строка начинается с метода Main(). Как упоминалось выше, в C# подпрограм ма называется методом. И, как поясняется в предшествующем комментарии, именно с этой строки начинается выполнение программы. Выполнение всех приложений C# начинается с вызова метода Main(). Разбирать полностью значение каждого элемента данной строки пока что не имеет смысла, потому что для этого нужно знать ряд других средств С#. Но поскольку данная строка используется во многих примерах программ, приведенных в этой книге, то проанализируем ее вкратце.
Данная строка начинается с ключевого слова static. Метод, определяемый ключе вым словом static, может вызываться до создания объекта его класса. Необходимость в этом объясняется тем, что метод Main() вызывается при запуске программы. Ключе вое слово void указывает на то, что метод Main() не возвращает значение. В дальней шем вы узнаете, что методы могут также возвращать значения. Пустые круглые скоб ки после имени метода Main означают, что этому методу не передается никакой ин формации. Теоретически методу Main() можно передать информацию, но в данном примере этого не делается. И последним элементом анализируемой строки является символ {, обозначающий начало тела метода Main(). Весь код, составляющий тело метода, находится между открывающими и закрывающими фигурными скобками. Рассмотрим следующую строку программы. Обратите внимание на то, что она на ходится внутри метода Main(). Console.WriteLine("Простая программа на С#.");
В этой строке осуществляется вывод на экран текстовой строки "Простая про грамма на C#. Сам вывод выполняется встроенным методом WriteLine(). В дан ном примере метод WriteLine() выводит на экран строку, которая ему передается. Информация, передаваемая методу, называется аргументом. Помимо текстовых строк, метод WriteLine() позволяет выводить на экран другие виды информации. Анализи руемая строка начинается с Console — имени предопределенного класса, поддержи вающего ввод-вывод на консоль. Сочетание обозначений Console и WriteLine() ука зывает компилятору на то, что метод WriteLine() является членом класса Console. Применение в C# объекта для определения вывода на консоль служит еще одним сви детельством объектно-ориентированного характера этого языка программирования. Обратите внимание на то, что оператор, содержащий вызов метода WriteLine(), оканчивается точкой с запятой, как, впрочем, и рассматривавшаяся ранее дирек тива using System. Как правило, операторы в C# оканчиваются точкой с запятой. Исключением из этого правила служат блоки, которые начинаются символом { и оканчиваются символом }. Именно поэтому строки программы с этими символами не оканчиваются точкой с запятой. Блоки обеспечивают механизм группирования опе раторов и рассматриваются далее в этой главе.
Первый символ } в анализируемой программе завершает метод Main(), а вто рой — определение класса Example.
И наконец, в C# различаются прописные и строчные буквы. Несоблюдение этого правила может привести к серьезным осложнениям. Так, если вы неумышленно на берете main вместо Main или же writeline вместо WriteLine, анализируемая про грамма окажется ошибочной. Более того, компилятор C# не предоставит возможность выполнить классы, которые не содержат метод Main(), хотя и скомпилирует их. По этому если вы неверно наберете имя метода Main, то получите от компилятора со общение об ошибке, уведомляющее о том, что в исполняемом файле Example.ехе не определена точка входа. Обработка синтаксических ошибок
Если вы только начинаете изучать программирование, то вам следует научиться правильно истолковывать (и реагировать на) ошибки, которые могут появиться при попытке скомпилировать программу. Большинство ошибок компиляции возникает в результате опечаток при наборе исходного текста программы. Все программисты рано или поздно обнаруживают, что при наборе исходного текста программы очень легко сделать опечатку. Правда, если вы наберете что-нибудь неправильно, компиля тор выдаст соответствующее сообщение о синтаксической ошибке при попытке скомпи лировать вашу программу. В таком сообщении обычно указывается номер строки ис ходного текста программы, где была обнаружена ошибка, а также кратко описывается характер ошибки.
Несмотря на всю полезность сообщений о синтаксических ошибках, выдаваемых компилятором, они иногда вводят в заблуждение. Ведь компилятор C# пытается из влечь какой-то смысл из исходного текста, как бы он ни был набран. Именно по этой причине ошибка, о которой сообщает компилятор, не всегда отражает настоящую причину возникшего затруднения. Неумышленный пропуск открывающей фигурной скобки после метода Main() в рассмотренном выше примере программы приводит к появлению приведенной ниже последовательности сообщений об ошибках при компиляции данной программы компилятором командной строки csc. (Аналогич ные ошибки появляются при компиляции в интегрированной среде разработки Visual Studio.) EX1.CS(12, 21) : ошибка CS1002: ; ожидалось ЕХ1.CS(13, 22) : ошибка CS1519: Недопустимая лексема '(' в объявлении члена класса, структуры или интерфейса EX1.CS(15, 1) : ошибка CS1022: Требуется определение типа или пространства имен либо признак конца файла
Очевидно, что первое сообщение об ошибке нельзя считать верным, поскольку про пущена не точка с запятой, а фигурная скобка. Два других сообщения об ошибках вно сят такую же путаницу.
Из всего изложенного выше следует, что если программа содержит синтаксиче скую ошибку, то сообщения компилятора не следует понимать буквально, поскольку они могут ввести в заблуждение. Для выявления истинной причины ошибки может потребоваться критический пересмотр сообщения об ошибке. Кроме того, полезно проанализировать несколько строк кода, предшествующих той строке, в которой об наружена сообщаемая ошибка. Иногда об ошибке сообщается лишь через несколько строк после того места, где она действительно произошла. Незначительное изменение программы
Несмотря на то что приведенная ниже строка указывается во всех примерах про грамм, рассматриваемых в этой книге, формально она не нужна. using System;
Тем не менее она указывается ради удобства. Эта строка не нужна потому, что в C# можно всегда полностью определить имя с помощью пространства имен, к которому оно принадлежит. Например, строку Console.WriteLine("Простая программа на С#.");
можно переписать следующим образом. System.Console.WriteLine("Простая программа на С#.");