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

на главную

Жанры

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

Ватсон Карли

Шрифт:

Можно опустить любой из методов доступе

get
или
set
из определения свойства, и в этом случае свойство осуществляет соответственно либо только запись, либо только чтение.

Операторы

Значение и синтаксис операторов в большинстве случаев те же в C#, что и в C++. Следующие операторы по умолчанию имеют в C# такое же значение и синтаксис как и в C++:

□ Бинарные арифметические операторы

+
,
,
*
,
/
,
%

□ Соответствующие

арифметические операторы присваивания
+=
,
– =
,
*=
,
/=
,
%=

□ Унарные операторы

++
и
– -
(обе — префиксная и постфиксная формы)

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

!=
,
==
,
<
,
<=
,
>=

□ Операторы сдвига

>>
и
<<

□ Логические операторы

&
,
|
,
&&
,
||
,
~
,
^
,
!

□ Операторы присваивания, соответствующие логическим операторам:

>>=
,
<<=
,
&=
,
|=
,
^=

□ Тернарный (условный) оператор

Символы

,
[]
, и
,
(запятая) также имеют в общих чертах такой же эффект в C#, как и в C++.

Необходимо быть осторожным со следующими операторами, так как они действуют в C# иначе, чем в C++:

□ Присваивание (

=
),
new
,
this
.

Оператор разрешения области видимости в C# представлен

.
, а не
::
(
::
не имеет смысла в C#). Также в C# не существуют операторы
delete
и
delete[]
. Они не нужны, так как сборщик мусора автоматически управляет очисткой памяти в куче. Однако C# предоставляет также три других оператора, которые не существуют в C++, а именно,
is
,
as
и
typeof
. Эти операторы связаны с получением информации о типе объекта или класса.

Оператор присваивания (=)

Для простых типов данных = просто копирует данные. Однако при определении своих собственных классов C++ считает в большой степени, что обязанность разработчика указать значение

=
для этих классов. По умолчанию в C++
=
требует поверхностного почленного копирования всех переменных, классов или структур. Однако программисты перезагружают этот оператор для выполнения более сложных операций присваивания.

В C# правила, определяющие, что означает оператор присваивания, значительно проще. Вообще не разрешается перезагружать =, его значение неявно определено во всех ситуациях.

Ситуация в C# будет следующая:

□ Для простых типов данных

=
просто копирует значения, как в C++.

□ Для

структур
=
делает поверхностное копирование структуры — прямую копию памяти данных в экземпляре структуры. Это аналогично поведению в C++.

□ Для классов

=
копирует ссылку, то есть адрес, а не объект. Это не соответствует поведению в C++.

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

MemberwiseCopy
, который все классы в C# по умолчанию наследуют из класса
System.Object
— общего класса-предка, из которого неявно выводятся все классы C#.

this

Оператор

this
имеет то же самое значение, что и в C++, но это скорее ссылка, а не указатель. Например, в C++ можно записать:

this->m_MyField = 10;

В C# это будет выглядеть так:

this.MyField = 10;

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

new

Как сообщалось ранее, оператор

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

Классы и структуры

В C++ классы и структуры очень похожи. Формально единственное различие состоит в том, что члены структуры являются по умолчанию открытыми, в то время как члены класса являются по умолчанию закрытыми. На практике, однако, многие программисты предпочитают использовать структуры и классы различным образом, сохраняя использование структур для объектов данных, которые содержат только члены-переменные (другими словами, без функций членов или явных конструкторов).

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

□ Структуры не поддерживают наследование, кроме того факта, что они являются производными из

System.ValueType
. Невозможно наследовать от структуры и структура не может наследовать от другой структуры или класса.

□ Структуры являются типами данных значений. Классы всегда являются ссылочными типами данных.

□ Структуры позволяют организовать способ размещения полей в памяти и определяют эквивалент объединений C++.

□ Конструктор структуры по умолчанию (без параметров; всегда поставляется компилятором и не может быть заменен.

Поскольку классы и структуры сильно отличаются в C#, они в этом приложении рассматриваются по отдельности.

Классы 

Классы в C# следуют в основном тем же самым принципам, что и в C++, однако существует разница в свойствах и синтаксисе. Мы рассмотрим отличия между классами C++ и классами C# в этом разделе.

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

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Большая игра

Ланцов Михаил Алексеевич
4. Иван Московский
Фантастика:
альтернативная история
5.00
рейтинг книги
Большая игра

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Отмороженный

Гарцевич Евгений Александрович
1. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный

Смерть может танцевать 2

Вальтер Макс
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Смерть может танцевать 2

Я Гордый Часть 3

Машуков Тимур
3. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый Часть 3

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х

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

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

Брачный сезон. Сирота

Свободина Виктория
Любовные романы:
любовно-фантастические романы
7.89
рейтинг книги
Брачный сезон. Сирота