Корневой базовый класс Object
Вся работа .NET Framework (а следовательно, и VB .NET) основана на том, что каждый тип является производным от корневого класса Object, общего предка всех классов (в ООП такие классы иногда называются космическими (space) базовыми классами). К классу Object восходят все типы, как ссылочные (экземпляры классов), так и структурные (числовые типы и даты, перечисляемые типы и структуры). В частности, из этого следует, что любой функции, получающей параметр типа Object, можно передать параметр произвольного типа (поскольку главное правило наследования, упоминавшееся в начале главы, требует, чтобы переменная производного типа могла использоваться в любом контексте вместо переменной базового типа).
Класс Object содержит ряд встроенных логических функций, предназначенных для проверки типа объектной переменной:
Потомки класса Object делятся на две категории: структурные типы, производные от System. Val ueType (базовый класс всех структурных типов), и ссылочные типы, производные непосредственно от Object. Чтобы узнать, принадлежит ли некоторый тип к категории структурных типов, воспользуйтесь проверкой следующего вида:
Sub Maine)
Dim a As Integer = 3
Console.Writel_ine("a is a value type is " & IsValueType(a))
Console. ReadLine()
End Sub
Function IsValueType(ByVal thing As Object) As Boolean
Return (TypeOf (thing) Is System.ValueType)
End Function
Вероятно, перед нами одна из ошибок разработчиков VB .NET — функция TypeOf не может вызываться для структурных переменных без определения вспомогательной функции, получающей объект указанного типа. Конечно, следовало бы позволить программисту передавать структурный тип при вызове TypeOf.