Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Следующее действие часто встречается в 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);

Теперь можно сравнить объявление и инициализацию переменной по отдельности.

Объявления

Очевидное синтаксическое различие между C# и VB в объявлении переменных состоит в том, что в C# тип данных предшествует, а не следует за именем переменной без использования других ключевых слов. Это дает объявлениям C# более компактный формат, чем их аналогам в VB.

Отметим, что идея объявления, состоящего только из типа, за которым следует имя, используется также и в других местах. Посмотрим снова на объявление метода в C#:

private void OnClickShowResults(object sender, System.EventArgs e);

Тип (

void
) предшествует имени метода, не используя никаких других ключевых слов для указания того, что объявляется — это очевидно из контекста. То же самое справедливо для параметров. Типами параметров являются
object
и
System.EventArgs
. Тип
object
в C#, кстати, играет роль, аналогичную
Object
в VB,— он указывает то, для чего тип данных не был определен. Однако
object
в C# значительно более мощный, чем Object в VB, и в C#
object
заменяет тип данных Variant из VB.
object
мы рассмотрим позднее.
System.EventArgs
не будет рассматриваться подробно в этом приложении. Это базовый класс .NET и он не имеет аналога в VB.

Поделиться с друзьями: