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

на главную - закладки

Жанры

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

Ватсон Карли

Шрифт:

Идея имен переменных, различающихся только регистром символов, может показаться странной на первый взгляд. Но если к этому привыкнуть, можно обнаружить, что дополнительная свобода, которая благодаря этому достигается в именовании переменных, делает такую возможность действительно полезной.

Как правило, ключевые слова 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.

В случае переменных синтаксис объявления, использованный в C#, позволяет комбинировать объявление с заданием начального значения переменной. В этом примере

NumberInput
инициализируется достаточно сложным выражением, которое скоро будет рассмотрено подробнее. Но сначала два простых примера:

int x = 10; // int аналогично Long в VB

string Message = "Hello World"; // string аналогично String в VB

Необходимо также отметить некоторые моменты, связанные с переменными.

Поделиться:
Популярные книги

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

Идеальный мир для Лекаря 24

Сапфир Олег
24. Лекарь
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Идеальный мир для Лекаря 24

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Ванька-ротный

Шумилин Александр Ильич
Фантастика:
альтернативная история
5.67
рейтинг книги
Ванька-ротный

Измена. Тайный наследник

Лаврова Алиса
1. Тайный наследник
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Тайный наследник

70 Рублей - 2. Здравствуй S-T-I-K-S

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
70 Рублей - 2. Здравствуй S-T-I-K-S

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Последний наследник

Тарс Элиан
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний наследник

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2