Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

} 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
.

Дополнительный код в C#

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

SquareRoot
код обработчика событий, который здесь представлен, представляет весь исходный код этого проекта. Напротив, в версии C# этот обработчик событий является только одним методом в огромном файле исходного кода.

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

  • Читать дальше
  • 1
  • ...
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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