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