// и т.д.
В 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
.
switch (MyString) {
case 'Hello':
// что-нибудь сделать
goto case 'Goodbye'; // перейдет к выполнению инструкций
// в предложении 'Goodbye'
case 'Goodbye':
// сделать что-то еще
break;
case 'Black': // здесь можно провалиться, так как он пустой
case 'White':
// сделать что-то еще
// выполняется, если MyString содержит
// либо 'Black', либо 'White'
break;
default:
int j = 3;
break;
}
Компания Microsoft решила использовать инструкцию goto
в этом контексте, чтобы предотвратить появление ошибок в случае, если требовалось выполнить пропущенный break
, и код в инструкции switch
проваливался в следующее предложение