ПОНЯТНО О Visual Basic NET (том 2)

Соответствие типов


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

        Dim a As Integer

        Dim b As Integer = 99

        a = b + 2

А вот при попытке выполнить следующий фрагмент

        Dim a As Integer

        Dim s As String = "Привет"

        a = s

VB выдаст ошибку:

Cast from string "Привет" to type 'Integer' is not valid.

Переводится сообщение так:

«Преобразование строки "Привет"  в тип  Integer  незаконно».

Действительно, в какое число можно превратить строчку текста? Нонсенс.



А зачем VB вообще что-то преобразовывал? А затем, что есть такое правило выполнения оператора присваивания:

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

Рассмотрим фрагмент:

        Dim a As Integer

        Dim b As Double = 1

        a = b + 0.48

Он будет выполнен гладко, несмотря на то, что справа – Double, а слева –  Integer. VB не возражает в данном случае преобразовать дробное число в целое. Несмотря на колоссальную потерю в точности (1 вместо 1.48), никаких сообщений или предупреждений мы не увидим. Это программист сам виноват, что объявил переменную целым типом.

Так же гладко выполнится и следующий фрагмент:

        Dim a As Integer = 99

        Dim s As String

        s = a

Здесь VB преобразует число 99 в строку “99”.

Соответствие типов требуется и при вызове процедур и функций с параметрами.

При обращении к процедуре VB смотрит, совпадает ли тип параметра в обращении к процедуре с типом соответствующего параметра в заголовке объявления процедуры. Если совпадает – хорошо, а если не совпадает, то пытается преобразовать его тип к нужному (тому, что в объявлении). Если удается – хорошо, а если нет, VB выдает сообщение об ошибке.

В подтверждение этих слов достаточно вспомнить Методы, «придирчивые» к типу параметров (6.2.8).

Чтобы не было проблем, старайтесь объявлять переменные и параметры, между которыми должно соблюдаться соответствие, одинаковыми типами.



Содержание раздела