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

на главную - закладки

Жанры

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

Ватсон Карли

Шрифт:

В C# компиляция делается в два этапа, где первый этап выполняется на так называемом промежуточном языке (IL) Этот этап будем называть собственно компиляцией. Второй этап — преобразование в исполнимый код, происходящее во время выполнения, является более простым этапом, поэтому он не ведет к значительным потерям производительности. Он также не является интерпретацией. Сразу целые части кода преобразуются из IL в язык ассемблера, и полученный исполнимый код на собственном языке машины затем сохраняется, поэтому не требуется его перекомпиляции в следующий раз, когда будет выполняться эта часть кода. Компания Microsoft считает, что в комбинации с различными оптимизациями это, в конечном счете ведет к коду, который действительно выполнится быстрее,

чем при использовании предыдущей системы прямой компиляции из исходного кода в собственный исполнимый код. Хотя о существовании IL необходимо помнить, он не будет влиять на обсуждение в этом приложении, так как он реально не влияет на синтаксис языка C#.

Базовые классы .NET

VB не состоит просто из одного языка. Существует большое число связанных с ним функций, скажем, функции преобразования

CInt
,
CStr
и т.д., функции файловой системы, функции даты-времени и многие другие. VB также полагается на присутствие элементов управления ActiveX, предоставляющих стандартные элементы управления, которые помещаются на форме,— поля списков, кнопки, текстовые поля и т.д.

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

Одним из важных различий между VB6 и C# в этом отношении является то, что система функций VB является специфической для VB, в то время как базовые класс .NЕТ доступны для любого поддерживающего .NET языка программирования.

Соглашения

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

// Код который уже был показан

// Код C#, на который необходимо обратить внимание или который

// является новым

Однако весь код VB дается в следующем формате:

' Код VB представлен на белом фоне

Пример: Форма для извлечения квадратного корня

В этом разделе мы рассмотрим простое приложение, называемое

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

Версия SquareRoot

на VB

Чтобы это приложение работало в Visual Basic, надо добавить обработчик событий для события нажатия кнопки. Для кнопки задается имя

cmdShowResults
, а текстовые поля имеют имена
txtNumber
,
txtSign
и
txtResult
. С этими именами обработчик событий выглядит следующим образом:

Option Explicit

Private Sub cmdShowResults_Click

 Dim NumberInput As Single

 NumberInput = CSng(Me.txtNumber.Text)

 If (NumberInput < 0) Then

Me.txtSign.Text = "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))

 End If

End Sub

Это единственный фрагмент кода VB, который необходимо написать.

Версия SquareRoot на C#

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

// Обработчик событий нажатия пользователем кнопки Show Results.

// выводится квадратный корень и знак числа

private void OnClickShowResults(object sender, System.EventArgs e) {

 float NumberInput = float.Parse(this.txtNumber.Text);

 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#. В ходе этого процесса мы также выявим различия между базовыми методологиями C# и VB.

Базовый синтаксис

Давайте рассмотрим две программы SquareRoot для ознакомления с синтаксисом C#.

С# требует, чтобы все переменные были объявлены

Начнем с первой строки кода VB, где находится объявление

Option Explicit
. Эта инструкция не имеет аналога в C#, так как в C# переменные должны всегда быть объявлены до своего использования. Это соответствует тому, как если бы C# всегда выполнялся с включенным
Option Explicit
и не разрешал отключить этот режим. Поэтому нет необходимости явно объявлять
Option Explicit
.

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

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

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

Завещание Аввакума

Свечин Николай
1. Сыщик Его Величества
Детективы:
исторические детективы
8.82
рейтинг книги
Завещание Аввакума

Плохая невеста

Шторм Елена
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Плохая невеста

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

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

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга III

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

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

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

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

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

Неудержимый. Книга XV

Боярский Андрей
15. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XV

Пленники Раздора

Казакова Екатерина
3. Ходящие в ночи
Фантастика:
фэнтези
9.44
рейтинг книги
Пленники Раздора

Титан империи

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

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

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII

Жена моего брата

Рам Янка
1. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Жена моего брата