Объявления

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

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

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

Тип (void) предшествует имени метода, не используя никаких других ключевых слов для указания того, что объявляется — это очевидно из контекста. То же самое справедливо для параметров. Типами параметров являются object и System.EventArgs. Тип object в C#, кстати, играет роль, аналогичную Object в VB,— он указывает то, для чего тип данных не был определен. Однако object в C# значительно более мощный, чем Object в VB, и в C# object заменяет тип данных Variant из VB. object мы рассмотрим позднее. System.EventArgs не будет рассматриваться подробно в этом приложении. Это базовый класс .NET и он не имеет аналога в VB.

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

int x = 10; // int аналогично Long в VB

string Message = 'Hello World'; // string аналогично String в VB

Необходимо также отметить некоторые моменты, связанные с переменными.

Никаких суффиксов в C#

VB позволяет присоединять суффиксы к переменным, чтобы указать их тип данных: $ для String, % для Int, & для Long.

Dim Message$ ' будет string

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

Никаких значений по умолчанию для локальных переменных

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

Присваивание значений переменным

Присваивание значений переменным в C# делается с помощью такого же синтаксиса, как и в VB. После имени переменной помещается знак =, за которым следует присваиваемое значение. Однако необходимо отметить, что это единый синтаксис, принятый в C#. В некоторых случаях в VB используется Let, в то время как для объектов в VB всегда используется ключевое слово Set:

Set MyListBox = new ListBox;

C# не использует отдельный синтаксис для присваивания объектных ссылок. Эквивалент в C# для вышеприведенного будет следующим:

MyListBox = new ListBox();

Помните, что в C# значения переменным всегда присваиваются с помощью синтаксиса <ИмяПеременной>=<Выражение>.

Классы 

Теперь рассмотрим, что происходит в выражении, используемом для инициализации переменной NumberInput в примере SquareRoot. В C# и VB делается практически одно и то же: извлекается текст из текстового поля txtNumber. Но синтаксис этого выглядит по- разному в двух этих языках:

NumberInput = CSng(Me.txtNumber.Text)

и

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

Получение значения из текстового поля достаточно похоже в обоих случаях. Единственное различие для этой части процесса является чисто синтаксическим — VB использует ключевое слово Me, в то время как C# применяет ключевое слово this, которое имеет точно такое же значение (фактически, в C# можно его при желании опустить, так же как можно опустить Me в VB). В C# можно было в равной степени написать:

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

Более интересной частью является то, как строка, извлеченная из текстового поля, преобразуется во float (или single), потому что это иллюстрирует фундаментальное свойство языка C#, о котором кратко упоминалось ранее:

В C# все является частью класса.

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

В C# преобразование из строки в число с плавающей точкой выполняется методом Parse() . Однако, так как Parse() является частью класса, ему должно предшествовать имя класса. Класс, на котором необходимо вызвать метод Parse(), будет классом float. До сих пор float интерпретировался просто как эквивалент C# для Single из VB. Но на самом деле он также является классом. В C# все типы данных тоже являются классами, и значит, такие вещи как int, float и string имеют методы и свойства, которые можно вызывать (хотя необходимо отметить, что int и float являются специальными типами класса, известного в C# как структуры. Различие для этого кода не важно, но оно будет объяснено позже.)

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

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

0

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

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