имени модуля класса, но Parse вызван с помощью определения имени класса float, а не имени переменной. Parse() в действительности является специальным типом метода, называемого статическим (static) методом. Статический метод можно вызывать, не создавая экземпляр класса. Следовательно здесь определяется имя класса float, а не имя переменной. static имеет в C# значение, отличное от того, которое он имеет в VB. В C# нет эквивалента статическим переменным VB — в них нет необходимости в объектах C#, так как с этой целью будут использоваться поля C#.

Инструкции If

Мы переходим к основной части обработчика событий — инструкции if. Вспомните, что версия VB выглядит следующим образом:

If (NumberInput < 0) Then

 Me.txtSign.Texgt = 'Negative'

 Me.txtResult.Text = CStr(Sqr(-NumberInput)) & ' i'

ElseIf (NumberInput = 0) Then

 txtSign.Text = 'Zero'

 txtResult.Text = '0'

Else

 Me.txtSign.Text = 'Positive'

 Me.txtResult.Text = CStr(Sqr(NumberInput))

EndIf

в то время как версия C# записывается так:

if (NumberInput < 0) {

 this.txtSign.Text = 'Negative';

 this.txtResult.Text = Math.Sqrt(-NumberInput).ToString() + ' i';

} else if (NumberInput == 0) {

 txtSign.Text = 'Zero';

 txtResult.Text = '0';

} else {

 this.txtSign.Text = 'Positive';

 this.txtResult.Text = Math.Sqrt(NumberInput).ToString();

}

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

if (NumberInput < 0) this.txtResult.Text = Math.Sqrt(-NumberInput) + ' i';

else if (NumberInput == 0) txtSign.Text = 'Zero';

else this.txtResult.Text = Math.Sqrt(NumberInput).ToString();

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

If NumberInput < 0 Then

Попытка выполнить то же самое в C# немедленно приведет к ошибке компиляции. В целом C# значительно более точен в отношении ожидаемого синтаксиса, чем VB. Отметим также, что при проверке равенства нулю NumberInput для сравнения используются два последовательных знака равенства:

else if (NumberInput == 0)

В VB символ = применяется в двух назначениях: для присваивания значений переменным и для сравнения значений. C# формально распознает это как операции двух различных типов и поэтому использует два различных символа: = для присваивания и == для сравнения.

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

else if состоит в C# из двух слов, а в VB используется одно слово ElseIf

Вычисление квадратного корня: еще один метод класса

В соответствии со сделанным ранее замечанием о том, что все в C# является членом класса, будет неудивительно узнать, что эквивалент в C# функции Sqr из VB, которая вычисляет квадратный корень, также является методом, являющимся членом класса. В данном случае это метод Sqrt(), который представляют статический член другого базового класса .NET с именем System.Math, сокращаемый в коде просто до Math.

Можно также заметить, что в этом примере в условии с введенным числом, точно равным нулю, ключевое слово this в коде C# не определено:

txtSign.Text = 'Zero';

txtResult.Text = '0';

и в соответствующем коде VB также не определяется явно Me. В C# по аналогии с VB, не требуется явно определять this (Me), если только по какой-то причине контекст окажется не ясным. Здесь это делается только для иллюстрации.

Строки 

При выводе квадратного корня отрицательного числа выполняется небольшая работа со строками:

this.txtResult.Text = Math.Sqrt(-NumberInput).ToString() + ' i';

Этот код покалывает, что в C# конкатенация строк делается с помощью символа +, а не &. Можно также заметить, что преобразование из float в String выполняется с помощью вызова метода на объекте float. Метод называется ToString(), и он не является статическим, поэтому вызывается с помощью того же синтаксиса, что и в VB при вызове методов на объектах, способом задания перед именем метода имени переменной, представляющей объект, с точкой. В отношении C# необходимо помнить одну полезную вещь — каждый объект (и следовательно, каждая переменная) реализует метод ToString().

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату