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

на главную

Жанры

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

Ватсон Карли

Шрифт:

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

Main
.

Синтаксис языка

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

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

□ C++ требует точку с запятой после определения класса. C# не требует.

□ C++ позволяет использовать выражения как инструкции, даже если они не имеют результата, например:

i + 1;

В C# это будет ошибкой.

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

Опережающие объявления

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

Отсутствие разделения определения и объявления

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

class CMyClass {

public:

 void MyMethod; // определение этой функции находится в файле C++,

 // если только MyMethod не является встраиваемой функцией

 // и т.д.

В C# этого не делают. Методы всегда определяются полностью в определении класса

class MyClass {

 public void MyMethod {

// здесь реализация

На первый взгляд может показаться, что это ведет к коду, который труднее читать. Достоинство подхода C++ в этом вопросе в конце концов состоит в том что можно просто просмотреть заголовочный файл, чтобы узнать, какие открытые функции предоставляет класс, не обращаясь к реализации этих функций. Однако это больше не требуется в C#, частично в связи с использованием современных редакторов (редактор Visual Studio.NET позволяет сворачивать реализации методов), а частично в связи с тем, что C# имеет средство автоматического создания документации для кода в формате XML.

Поток выполнения программы

Поток выполнения программы в C# аналогичен потоку C++. В частности,

следующие инструкции работают точно таким же образом в C#, как они работают в C++, и имеют точно такой же синтаксис:

for

return

goto

break

continue

Существует пара синтаксических различий для инструкций

if
,
while
,
do…while
и
switch
, и C# предоставляет дополнительную инструкцию управления потоком выполнения
foreach
.

if…else

Инструкция

if
работает точно таким же образом и имеет такой же синтаксис в C#, как и в C++, кроме одного момента. Условие в каждом предложении
if
или
else
должно оцениваться как
bool
. Например, предположим что х является целым типом данных, а не
bool
, тогда следующий код C++ будет создавать ошибку компиляции в C#:

if (х) {

Правильный синтаксис C# выглядит так:

if (x != 0) {

так как оператор

!=
возвращает
bool
.

Это требование является хорошей иллюстрацией того, как дополнительная безопасность типов в C# заранее перехватывает ошибки. Ошибки времени выполнения в C++, вызываемые написанием

if (a=b)
, когда предполагалось написать
if (a==b)
являются достаточно распространенными. В C# эти ошибки будет перехватываться во время компиляции.

Отметим, что в C# невозможно преобразовать числовые переменные в или из

bool
.

while и do…while

Также, как и для

if
, эти инструкции имеют точно такой же синтаксис и назначение в C#, как и в C++, за исключением того, что условное выражение должно оцениваться как
bool
.

int X;

while (X) {/* инструкции */} // неправильно

while (X != 0) {/* инструкции */} // правильно

switch 

Инструкция

switch
служит для тех же целей в C#, что и в C++. Она является, однако, более мощной в C#, так как используется строка в качестве проверяемой переменной, что невозможно в C++:

string MyString; // инициализировать MyString

switch (MyString) {

case "Hello":

 // что-нибудь сделать

 break;

case "Goodbye":

 // и т.д.

Синтаксис в C# слегка отличается тем, что каждое предложение

case
должно явно заканчиваться. Не разрешается одному
case
содержать другой
case
, если только первый
case
не является пустым. Если желательно получить такой результат, используйте инструкцию
goto
.

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

Восход. Солнцев. Книга XI

Скабер Артемий
11. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга XI

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Гром над Тверью

Машуков Тимур
1. Гром над миром
Фантастика:
боевая фантастика
5.89
рейтинг книги
Гром над Тверью

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

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

Безродный

Коган Мстислав Константинович
1. Игра не для слабых
Фантастика:
боевая фантастика
альтернативная история
6.67
рейтинг книги
Безродный

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты

На три фронта

Бредвик Алекс
3. Иной
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
На три фронта

На границе империй. Том 7. Часть 3

INDIGO
9. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.40
рейтинг книги
На границе империй. Том 7. Часть 3

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

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

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

"Фантастика 2023-123". Компиляция. Книги 1-25

Харников Александр Петрович
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Фантастика 2023-123. Компиляция. Книги 1-25