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

на главную

Жанры

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

Ватсон Карли

Шрифт:

Надо отметить, что C# поддерживает также циклы

foreach
,
do
и
while
для соответствующих ситуаций.

Давайте вернемся к точному синтаксису. Вспомним, что версия C# для приведенного выше цикла

for
выглядит следующим образом:

for (int I = 0; I < 3; I++) {

 this.listBox1.Items.Add(Employees[I].Name);

 this.listBox1.Items.Add(Employees[I].ToString);

 this.listBox1.Items.Add("");

}

Как можно видеть, инструкция

for
получает три различные элемента внутри скобок. Эти элементы разделяются точкой с запятой:

□ Первый

элемент является действием, которое выполняется прямо в начале цикла, чтобы инициализировать цикл. В данном случае объявляется и инициализируется управляющая переменная цикла.

□ Следующим элементом является условие, определяющее завершение цикла. В данном случае условие состоит в том, что I должно быть меньше 3. Цикл продолжается, пока это условие будет

true
, и закончится, как только условие станет
false
. Условие оценивается в начале каждой итерации, чтобы, если оно окажется
false
в самом начале, инструкция внутри цикла вообще не выполнялась.

□ В третьем элементе находится инструкция, которая выполняется в конце каждой итерации цикла. Циклы Visual Basic всегда работают, увеличивая некоторое число, и это как раз то, что делается в данном случае.

Синтаксис выглядит незнакомым, но после привыкания к нему, можно использовать цикл

for
очень эффективно. Например, предположим, что необходимо вывести все целые степени 2, которые меньше 4000, в окне списка. Запишем следующий код:

for (int I = 2; I < 4000; I *= 2)

 listBox1.Items.Add(I.ToString);

Такой результат можно получить и в VB, но немного труднее. Для этого конкретного цикла в VB лучше воспользоваться циклом

while
.

Другие свойства C#

Мы закончили рассмотрение примеров. Оставшаяся часть приложения кратко рассматривает несколько свойств C#, о которых необходимо знать при выполнении перехода от VB к C#, и которые еще не рассматривались, в частности, некоторые из концепций C#, связанные с типами данных и операторами.

Типы данных

Как указывалось ранее, доступные в C# типы данных отличаются от типов данных, доступных в Visual Basic, лишь деталями. Но не только это, все типы данных в C# имеют свойства, которые обычно связываются с объектами. Например, как мы видели, каждый тип данных, даже простые типы, такие как

int
и
float
, поддерживает вызов методов (кстати, это свойство не вызывает никакой потери производительности).

Хотя типы данных, доступные в C#, слегка отличаются от типов данных в VB, все же большинство типов данных, знакомые из VB, имеют непосредственные эквиваленты в C#. Например, вместо

Double
из VB, C# имеет
double
, вместо
Date
из VB , C# имеет базовый класс .NET
DateTime
, который реализует огромное число методов и свойств, позволяющих извлекать или задавать даты с помощью различных форматов.

Одним исключением является

Variant
, для которого нет прямого эквивалента в C#. Тип данных
Variant
в VB является очень общим типом данных, который в некоторой степени существует только, чтобы поддерживать языки сценариев, которые не знают никаких других типов данных. Философия C#, однако, состоит в том, что язык является строго типизированным. Главная идея: если в каждом месте программы явно указывать используемый тип данных, то будет исключен один из основных источников ошибок времени выполнения. В связи с этим тип данных
Variant
в действительности не соответствует C#. Но все равно существуют ситуации, в которых необходимо ссылаться на переменную, не указывая тип этой переменной, и для этих случаев C# имеет тип данных
object
.
object
в C# очень похож на
Object
в VB. Однако в VB
Object
ссылается конкретно на объект COM и поэтому может использоваться только для ссылок на объекты, которые в терминологии VB означают ссылочные типы данных. Нельзя, например, использовать объектную ссылку для ссылки на
Integer
или на
Single
. В C#, напротив,
объекты могут использоваться для ссылки на любой тип данных .NET, и так как в C# все типы данных являются типами данных .NET, это означает, что вы в праве преобразовать что угодно в
object
, включая
int
,
float
и все предопределенные типы данных. В этом смысле
object
в C# выполняет роль, аналогичную
Variant
в VB.

Типы данных значений и ссылочные типы данных

В Visual Basic существует четкое различие между типами данных значений и ссылочными типами данных. Типы данных значений включают большинство предопределенных типов данных:

Integer
,
Single
,
Double
и даже
Variant
(хотя строго говоря
Variant
может содержать также ссылку). Ссылочными типами данных являются любые объекты, включая определяемые модули классов и объекты ActiveX. Как можно было заметить из примеров в этом приложении, C# также делает различие между типами данных значений и ссылочными типами данных. Однако C# допускает больше гибкости, позволяя при определении класса найти, что этот класс будет типом данных значений. Это делается с помощью объявления класса структурой (struct). В той степени, насколько это касается C#, структура является по сути специальным типом класса, который представляется как значение, а не как ссылка. Накладные расходы, связанные с созданием экземпляров структур и их разрушением при завершении с ними работы меньше, чем связанные с созданием экземпляров и разрушением классов. Однако C# ограничивает свойства структур. В частности, нельзя выводить классы или другие структуры из структур. Причина этого состоит в том, что структуры предназначены для использования в качестве динамичных, простых объектов, для которых наследование в действительности не подходит. Фактически все предопределенные классы в C# —
int
,
long
,
float
,
double
являются на самом деле структурами .NET, вот почему на них можно вызывать такие методы, как
ToString
. Тип данных
string
является, однако, ссылочным типом и поэтому в действительности является классом.

Операторы

Необходимо сказать несколько слов об операторах в C#, так как они действуют несколько иным образом по сравнению с операторами VB, и это может внести путаницу, если программист привык работать с VB. В VB существует на самом деле два типа операторов:

□ Оператор присваивания

=
, который присваивает значения переменным.

□ Все другие операторы:

+
,
,
*
и
/
, каждый из которых возвращает какое-то значение.

Здесь существует важное различие в том, что ни один из операторов, кроме

=
, не имеет никакого эффекта в смысле изменения какого-либо значения. Со своей стороны,
=
присваивает значение, но ничего не возвращает. Не существует оператора, который делает и то и другое.

В C# такого разделения просто не существует. Правило в C# гласит, что все операторы возвращают значение, а некоторые операторы имеют также дополнительный побочный эффект, присваивая некоторое значение переменной. Фактически мы уже видели пример этого, когда рассматривали оператор сложения-присваивания

+=
:

int А = 5, В = 15;

А += В; // выполняет арифметическую операцию

// и присваивает А результат (20)

Таким образом,

+=
возвращает, а также присваивает значение. Он возвращает новое значение, которое было присвоено. В связи с этим можно на самом деле написать:

int А = 5, B = 15;

int C = (А+=В);

Это в результате приведет в тому, что и

А
, и
С
будет присвоено значение 20. Оператор присваивания
=
также возвращает значение, которое было присвоено переменной с левой стороны выражения. Это означает, что можно записать код следующим образом:

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

Мастер Разума VII

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII

Набирая силу

Каменистый Артем
2. Альфа-ноль
Фантастика:
фэнтези
боевая фантастика
рпг
6.29
рейтинг книги
Набирая силу

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

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

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

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

LIVE-RPG. Эволюция 2

Кронос Александр
2. Эволюция. Live-RPG
Фантастика:
социально-философская фантастика
героическая фантастика
киберпанк
7.29
рейтинг книги
LIVE-RPG. Эволюция 2

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Последний попаданец 11. Финал. Часть 1

Зубов Константин
11. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 11. Финал. Часть 1

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Отверженный VI: Эльфийский Петербург

Опсокополос Алексис
6. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VI: Эльфийский Петербург

Изгой. Трилогия

Михайлов Дем Алексеевич
Изгой
Фантастика:
фэнтези
8.45
рейтинг книги
Изгой. Трилогия

Физрук 2: назад в СССР

Гуров Валерий Александрович
2. Физрук
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Физрук 2: назад в СССР

Адепт. Том второй. Каникулы

Бубела Олег Николаевич
7. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.05
рейтинг книги
Адепт. Том второй. Каникулы