C# и VB.
Базовый синтаксис
Давайте рассмотрим две программы SquareRoot для ознакомления с синтаксисом C#.
С# требует, чтобы все переменные были объявлены
Начнем с первой строки кода VB, где находится объявление Option Explicit
. Эта инструкция не имеет аналога в C#, так как в C# переменные должны всегда быть объявлены до своего использования. Это соответствует тому, как если бы C# всегда выполнялся с включенным Option Explicit
и не разрешал отключить этот режим. Поэтому нет необходимости явно объявлять Option Explicit
.
Причина такого ограничения заключается в том, что C# был очень тщательно спроектирован таким образом, чтобы затруднить случайное создание ошибок в коде. В VB рекомендуют всегда использовать Option Explicit
, потому что это препятствует созданию трудно находимых ошибок, вызываемых неправильно записанными именами переменных. Легко заметить, что C# не позволяет делать вещи, которые с большой вероятностью могут привести к ошибкам.
Комментарии
Комментирование кода всегда важно, поэтому дальше в обоих примерах (или первое, что делается в примере на C#) добавляется комментарий:
// Обработчик событий нажатия пользователем кнопки Show Results.
// Выводится квадратный корень и знак числа
private void OnClickShowResults(object sender, System.EventArgs e) {
В VB для обозначения начала комментария используется апостроф, а комментарий продолжается до конца строки. Комментарии в C# в этом коде действуют таким же образом, за исключением того, что начинаются с двух прямых наклонных черт: //
. Также как и для комментариев VB, можно использовать всю строку или добавить комментарий в конце строки:
// Этот код определяет результаты
int Result = 10 * Input; // получение результата
Однако C# более гибок в своих комментариях, так как позволяет использовать два других способа указания комментариев, каждый из которых имеет слегка различный эффект.
Комментарий также может быть ограничен последовательностями символов /
* и */
. Другими словами, если компилятор встречает последовательность /*
, он предполагает, что весь последующий текст является комментарием, пока не встретит последовательность */
. Это позволяет иметь длинные комментарии, которые распространяются на несколько строк:
/* этот текст действительно является длинным
длинным
длинным
длинным
комментарием * /
Короткие комментарии внутри строки являются очень полезными, если необходимо только временно заменить что-то в строке во время отладки:
X = /* 20 */ 15;
Третий способ похож на первый. Однако теперь используется три слэша:
/// <summary>
/// Event handler for user clicking Show Results button.
/// Displays square root and sign of number
/// </summary>
/// <param name='sender'></param>
/// <param name='e'></param>
private void OnClickShowResults(object sender, System.EventArgs e)
Если впереди используются три наклонные черты вместо двух, то комментарий по-прежнему продолжается до конца строки. Однако этот комментарий имеет теперь дополнительный результат: компилятор C# способен на самом деле использовать комментарии, которые начинаются с трех наклонных черт, чтобы автоматически создавать документацию для исходного кода как отдельный файл XML. Именно поэтому пример выше имеет достаточно формальную структуру для реального текста комментария. Эта структура готова к размещению в файле XML. Здесь не будут представлены детали этого процесса (он рассмотрен в главе 3). Необходимо только сказать, что комментируя каждый метод в коде, можно автоматически получить законченную документацию, которая обновляется при изменении кода. Компилятор будет даже проверять, что документация соответствует сигнатурам методов и т.д.
Разделение и группировка инструкций
Наиболее заметным различием между приведенными выше кодами на VB и на C# будет, почти наверняка, присутствие точек с запятыми и фигурных скобок в коде C#. Хотя это делает код C# довольно устрашающим, принцип на самом деле очень простой. Visual Basic применяет возврат каретки для указания конца инструкции, в то время как в C# используется для той же цели точка с запятой. Фактически компилятор полностью игнорирует все лишние пробелы, включая возвраты каретки. Эти свойства синтаксиса C# можно комбинировать, чтобы предоставить большую свободу при размещении кода. Например, следующий код (переформатированный из части приведенного выше примера) также вполне допустим в C#:
this.txtSign.Text = 'Negative';
this.txtResult.Text = Math.Sqrt(-NumberInput) + ' i';
Хотя очевидно, что если потребуется, чтобы другие люди смогли прочитать код, лучше предпочесть первый стиль кодирования. Visual Studio.NET будет в любом случае автоматически размещать код в таком стиле.
Скобки используются для группирования вместе инструкций в так называемые блочные инструкции (или иногда составные инструкции). Эта концепция в действительности не существует в VB. Можно сгруппировать вместе любые инструкции, помещая вокруг них скобки. Группа теперь рассматривается как одна блочная инструкция и может использоваться в любом месте в C#, где ожидается одиночная инструкция.
Блочные инструкции часто используются в C#. Например, в приведенном выше коде C# не существует явного указания на конец метода (C# имеет методы там, где VB имеет функции и подпрограммы). VB требуется инструкция End Sub
в конце любой подпрограммы, так как подпрограмма может содержать сколько угодно инструкций. Специальный маркер является единственным способом, который известен в VB для определения конца подпрограммы. C# действует по-другому. В C# метод формируется в