Поделиться через


Object как универсальный тип данных

Обновлен: Ноябрь 2007

Тип данных Object является корневым типом в .NET Framework и Visual Basic. Это означает, что все остальные типы данных и типы объектов являются производными от него либо непосредственно, либо косвенно. Это означает также, что любой другой тип данных, простейший или составной, может быть преобразован в Object.

Свободная типизация

Object можно использовать в качестве универсального типа данных. Это называется свободной типизацией. Следующий пример демонстрирует гибкие возможности такого типа.

Dim v As Object
v = "17"
' v contains the 2-character String value "17".
v = v - 15
' v now contains the Integer value 2.
v = "H" & v
' v now contains the 2-character String value "H2".

Несмотря на то, что при выполнении операций с переменными Object не столь важно, какие именно данные в них содержатся, нужно учесть следующие моменты.

  • При выполнении арифметических операций или функций с Object, он должен хранить числовые данные либо возникнет ошибка во время выполнения.

  • При объединении строк необходимо использовать оператор &, а не +. Существуют сложные правила, определяющие, когда оператор + складывает операнды и когда он объединяет их. Оператор + также должен выполнить проверку типа и преобразование в некоторых случаях, что снижает производительность.

Изменение типа данных переменной объекта

Хотя переменная Object может принимать данные любого типа, тип самой переменной изменить нельзя. Однако, можно изменить размерность переменной Object, сделав ее массивом переменных Object. В следующем примере продемонстрировано допустимое и недопустимое использование оператора Оператор ReDim (Visual Basic).

' The following statement declares a single Object.
Dim someObj As Object
' The following reallocation is valid only for Object.
ReDim someObj(8)
' The following statement attempts an INVALID change of data type.
ReDim someObj(8) As Double

Первый оператор ReDim изменяет someObj на массив Object. Это допустимо только с типом данных Object. Второй оператор ReDim является недопустимым, так как он содержит различные типы данных. Нужного эффект можно добиться с помощью отдельного массива. Это показано в приведенном ниже примере.

' First allocate a separate array.
Dim someArray(8) As Double
' Then assign the new array to the Object variable.
someObj = someArray

Объект как альтернатива структуре

Так как тип данных Object может хранить много различных типов данных, массив Object можно использовать во многих случаях вместо структуры. Массив Object несколько более гибок, чем структура, так как можно в любое время изменять тип данных, хранящихся в каждом элементе, и массив можно сделать динамическим, чтобы его размеры можно было менять по необходимости. Однако массив Object использует больше памяти, чем эквивалентная структура, и его производительность хуже.

См. также

Основные понятия

Программирование без типов в Visual Basic

Явное и неявное объявление

Проверка типов в Visual Basic

Эффективное использование типов данных

Объявление переменных объектов

Присваивание объектных переменных

Значения объектных переменных

Ссылки

Сводка типов данных (Visual Basic)

Функции преобразования типов

Другие ресурсы

Преобразование типов в Visual Basic