Иллюстрированный самоучитель по VB.NET

       

TypeName и TypeOf


Переменные, объявленные с типом Object, могут использоваться для хранения произвольных объектов. Следовательно, программисту необходимы средства для определения типа объекта, связанного с объектной переменной. В VB .NET эта задача решается двумя способами: функцией TypeName и оператором TypeOf ...Is.

Функция TypeName возвращает строку с описанием типа. Для всех типов, кроме базовых, должен быть предварительно вызван оператор New; в противном случае функция возвращает строку Nothing. Например, следующий фрагмент выводит в консольном окне строку Nothing:

Dim anSBuilder As System.Text.StringBuilder

Console.WriteLineC'My type name is " & TypeName(anSBuilder))

Но после вызова New в окне будет выведена строка StringBuilder:

Dim anSBuilder As New System.Text.StringBuilder

Console.WriteLineC'My type name is " & TypeName(anSBuilder))

Функция TypeName возвращает короткое имя класса, поэтому не рассчитывайте получить полное имя вида System.Text.StringBuilder.

Если вызвать функцию TypeName для массива, вы получите строковое имя, за которым следует пустая пара круглых скобок. Пример:

Dim aThing(5)As Integer

Console.WriteLine("My type Harness " & TypeName(aThing))

Полученная строка имеет вид Integer().

Функция TypeName удобна в процессе отладки, но в окончательных версиях программ обычно используется оператор TypeOf...Is. Он работает гораздо эффективнее, поскольку обходится без сравнений строк, необходимых при использовании TypeName. Синтаксис проверки выглядит следующим образом:

If TypeOf aThing Is System.Text.SthngBuilder Then

' Объект относится к типу StringBuilder End If

Оператор TypeOf...Is возвращает True, если объект относится к заданному типу или является производным от него. Поскольку в .NET все объекты являются производными от общего предка Object проверка вида TypeOf...Is Object всегда возвращает True, даже если переменная относится к типу, производному от Object. Если вам потребуется узнать точный тип объектной переменной, воспользуйтесь методом GetType.



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