классом.
Операторы
Необходимо сказать несколько слов об операторах в C#, так как они действуют несколько иным образом по сравнению с операторами VB, и это может внести путаницу, если программист привык работать с VB. В VB существует на самом деле два типа операторов:
□ Оператор присваивания =
, который присваивает значения переменным.
□ Все другие операторы: +
, -
, *
и /
, каждый из которых возвращает какое-то значение.
Здесь существует важное различие в том, что ни один из операторов, кроме =
, не имеет никакого эффекта в смысле изменения какого-либо значения. Со своей стороны, =
присваивает значение, но ничего не возвращает. Не существует оператора, который делает и то и другое.
В C# такого разделения просто не существует. Правило в C# гласит, что все операторы возвращают значение, а некоторые операторы имеют также дополнительный побочный эффект, присваивая некоторое значение переменной. Фактически мы уже видели пример этого, когда рассматривали оператор сложения- присваивания +=
:
int А = 5, В = 15;
А += В; // выполняет арифметическую операцию
// и присваивает А результат (20)
Таким образом, +=
возвращает, а также присваивает значение. Он возвращает новое значение, которое было присвоено. В связи с этим можно на самом деле написать:
int А = 5, B = 15;
int C = (А+=В);
Это в результате приведет в тому, что и А
, и С
будет присвоено значение 20. Оператор присваивания =
также возвращает значение, которое было присвоено переменной с левой стороны выражения. Это означает, что можно записать код следующим образом:
С = (А = В);
Этот код задает А
равным значению В
, а затем то же самое значение присваивает С
. Можно также написать эту инструкцию более просто:
С = А = В;
Обычное использование такого синтаксиса состоит в вычислении некоторого условия внутри инструкции if
и одновременном задании результата этого условия в виде переменой типа bool
(эквивалент в C# для Boolean
из VB), чтобы можно было использовать это значение позже:
// предположим, что X и Y — переменные, которые были инициализированы.
bool В;
if (В = (X==Y)) DoSomething();
Этот код выглядит пугающим на первый взгляд, но он вполне логичен. Давайте разберем его. Прежде всего компьютер проверяет условие X == Y
. В зависимости от того, содержат ли X
и Y
одинаковые данные, оно возвратит true
или false
и это значение будет присвоено переменной В
. Однако поскольку оператор присваивания также возвращает значение, которое было только что присвоено все выражение В = (X==Y)
также будет возвращать то же самое значение (true
или false
). Это возвращаемое значение затем используется предложением if
для определения, нужно ли выполнять условную инструкцию DoSometning()
. В результате этого кода условие X == Y
проверяется для выяснения, должны ли выполняться условные инструкции, и в то же самое время результаты этой проверки сохраняются в переменной В
.
Тернарный оператор
В этом приложении нет места для обсуждения всех доступных в C# операторов. Они подробно рассмотрены в главах 3-6. Однако упомянем тернарный оператор (известный также как условный оператор), так как он имеет очень необычный синтаксис. Тернарный оператор формируется из двух символов — ?
и :
. Он имеет три параметра и на самом деле эквивалентен инструкции If
в VB. Синтаксически используется следующие образом:
// В, X и Y являются некоторыми переменными или выражениями.
// В является Boolean.
B ? X : Y
и работает так: оценивается первое выражение, которое расположено перед символом ?
, если оно оценивается как true
, то возвращается результат второго выражение но если оно оценивается как false
, то вместо этого возвращается результат третьего выражения. Это предоставляет предельно компактный синтаксис для условного задания значения переменной. Например, можно написать:
int Z = (Х==Y) ? 5 : 8;
что будет иметь такой же результат, как и следующие вычисления:
int Z;
if (X==Y) Z = 5;
else Z = 8;
Заключение
В этом приложении было представлено краткое введение в C# с точки зрения сравнения его с Visual Basic. Мы обнаружили довольно мало различий в синтаксисе. В целом синтаксис C# позволяет выразить большинство инструкций более компактным образом. Также можно заметить большое сходство между языками, например в их использовании классов (или модулей классов в VB), типов данных значений, ссылочных типов данных и многих синтаксических структур. Однако C# поддерживает также многие мощные свойства, в частности связанные с наследованием и классическим объектно-ориентированным программированием, которые недоступны в VB.
Выполнение перехода от VВ к C# требует специальной подготовки, но стоит того, так как методология C# позволяет не только кодировать приложения, которые можно сделать в VB но также множество других приложений которые было бы трудно или невозможно создать в VB хорошо структурированными и легко поддерживаемыми. При использовании C# можно также получить дополнительный бонус среды выполнения .NET и всех связанных с этим преимуществ.