точности из одной составной инструкции. В связи с этим он заканчивается закрывающей фигурной скобкой, соответствующей открывающей скобке в начале метода.
Следующее действие часто встречается в C#: там, где Visual Basic использует некоторое ключевое слово для пометки конца блока кода, C# просто объединяет блок в составную инструкцию. Инструкция if
в приведенных выше примерах иллюстрирует такой подход. В VB необходима инструкция EndIf
для отметки окончания блока. В C# правило состоит в том, что предложение if
всегда содержит точно одну инструкцию, и предложение else
тоже одну. Если необходимо поместить более одной инструкции в любом предложении, как в случае примера выше, используется составная инструкция.
Использование заглавных букв
Еще одна особенность, которую можно заметить в отношении синтаксиса, состоит в том, что все ключевые слова— if
, else
, int
и т.д. в коде C# пишутся со строчной буквы. В отличие от VB язык C# различает заглавные и строчные буквы. Если написать If
вместо if
, то компилятор не поймет этот код. Одним из преимуществ использования заглавных и строчных букв является возможность существования двух переменных, имена которых различаются только регистром символов, таких как Name
и name
. Такая ситуация встретится во втором примере этого приложения.
Идея имен переменных, различающихся только регистром символов, может показаться странной на первый взгляд. Но если к этому привыкнуть, можно обнаружить, что дополнительная свобода, которая благодаря этому достигается в именовании переменных, делает такую возможность действительно полезной.
Как правило, ключевые слова C# записываются полностью строчными буквами.
Методы
Давайте сравним синтаксис, применяющийся в VB и C# для объявления части кода, которая будет обрабатывать событие.
В VB:
Private Sub cmdShowResults_Click()
а в C#:
private void OnClickShowResults(object sender, System.EventArgs e)
Первое замечание, которое необходимо сделать, состоит в том, что версия VB объявляет подпрограмму, в то время как версия C# объявляет метод. В Visual Basic код традиционно группируется в подпрограммы и функции с лежащей в основе этого концепцией процедуры. Помимо этого, объекты классов VB имеют так называемые методы, которые для всех практических целей означают то же самое, что и процедуры, за исключением того, что они являются частью модуля класса.
C#, наоборот, обладает только методами (в соединении с тем фактом, что, как будет показано позднее, все в C# является частью класса). В C# нет отдельной концепции функции и подпрограммы — эти термины даже не существуют в спецификации этого языка. В VB единственное реальное различие между подпрограммой и функцией состоит в том, что подпрограмма никогда не возвращает значение. В C#, если метод не должен возвращать значение, то это объявляется как возвращение void
(как выше проиллюстрировал метод OnClickShowResults()
).
Синтаксис объявления метода аналогичен в обоих языках, по крайней мере в том, что параметры следуют за именем метода в скобках. Отметим, однако, что в то время как в VB подпрограмма объявляется с помощью ключевого слова Sub
, в версии C# соответствующего слова не существует. В C# возвращаемого типа (void
в данном случае), за которым следует имя метода и открывающая скобка, будет достаточно для сообщения компилятору, что объявлен метод, так как ни одна другая конструкция в C# не имеет подобного синтаксиса (массивы в C# помечаются квадратными, а не круглыми скобками, поэтому нет риска смешения с ними).
Подобно Sub в VB, приведенному выше объявлению метода в C# предшествует ключевое слово private
. Оно имеет примерно то же значение, что и в VB — не позволяет внешнему коду видеть метод. Что точно понимается под 'внешним кодом', будет рассмотрено позже.
Необходимо отметить еще два различия в объявлении метода: версия C# получает два параметра и имеет имя, отличное от обработчика событий в VB.
Сначала рассмотрим различие в имени. Имя обработчика событий в VB задается как VB IDE. VB знает, что Sub является обработчиком событий для нажатия кнопки, потому что используется имя cmdShowResults_Click
. Если переименовать подпрограмму, то она не будет вызываться при нажатии кнопки. Однако C# не использует имя таким образом. В C#, как скоро будет показано, существует некий код, который сообщает компилятору, какой именно метод является обработчиком событий. Это означает, что обработчику можно задать любое имя. Однако что-нибудь начинающееся с On
для обработчика событий является традиционным, в C# обычная практика именования методов (и в связи с этим большинства других элементов) с помощью так называемой системы имен в стиле Pascal
которая означает, что слова соединяются вместе, а первая буква слова делается заглавной. Использование подчеркиваний в именах C# не рекомендуется, и имя здесь выбрано в соответствии с этими рекомендациями: OnClickShowResults()
.
Теперь о параметрах. В этом приложении не будут подробно рассматриваться параметры, но отметим просто, что все обработчики событий в C# должны иметь два параметра, аналогичные данным, и эти параметры могут предоставить некоторую дополнительную полезную информацию о событии (например, для события перемещения мыши они могут сообщать о положении указателя мыши).
Переменные
Пример SquareRoot
показывает достаточно много различий между объявлениями переменных в C# и VB. В версии VB объявляется число с плавающей точкой и задается его значение таким образом:
Dim NumberInput As Single
NumberInput = CSng(Me.txtNumber.Text)
Версия C# выглядит следующим образом:
float NumberInput = float.Parse(this.txtNumber.Text);
Как и можно было ожидать, типы данных в C# не совсем такие, как в VB. float
является эквивалентом в C# для Single
. Наверно проще понять, что происходит, если разделить версию C# на две строки. Следующий код C# имеет точно такой же результат, что и строка выше:
float NumberInput;
NumberInput = float.Parse(this.txtNumber.Text);
Теперь можно сравнить объявление и инициализацию переменной по отдельности.