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
. Но синтаксис этого выглядит по-разному в двух этих языках:
Получение значения из текстового поля достаточно похоже в обоих случаях. Единственное различие для этой части процесса является чисто синтаксическим — 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. В методы вызываются определением имени переменной, а не имени модуля класса, но
Parse
вызван с помощью определения имени класса
float
, а не имени переменной.
Parse
в действительности является специальным типом метода, называемого статическим (
static
) методом. Статический метод можно вызывать, не создавая экземпляр класса. Следовательно здесь определяется имя класса
float
, а не имя переменной.
static
имеет в C# значение, отличное от того, которое он имеет в VB. В C# нет эквивалента статическим переменным VB — в них нет необходимости в объектах C#, так как с этой целью будут использоваться поля C#.
Инструкции If
Мы переходим к основной части обработчика событий — инструкции
if
. Вспомните, что версия VB выглядит следующим образом: