типоф
typeof , поочередно также typeOf и TypeOf , — это оператор, несколькими языками программирования для определения типа данных переменной предоставляемый . Это полезно при создании программ, которые должны принимать несколько типов данных без явного указания типа.
В языках, поддерживающих полиморфизм и приведение типов , оператор typeof может иметь одно из двух различных значений при применении к объекту . В некоторых языках, например Visual Basic , [1] оператор typeof возвращает динамический тип объекта. То есть он возвращает истинный исходный тип объекта независимо от приведения типов. В этих языках оператор typeof — это метод получения информации о типе во время выполнения .
На других языках, таких как C# [2] или Д [3] и, в некоторой степени, на C (в рамках нестандартных расширений и предлагаемых стандартных версий ), [4] [5] оператор typeof возвращает статический тип операнда. То есть он оценивает объявленный тип в данный момент в программе, независимо от его исходной формы. Эти языки обычно имеют другие конструкции для получения информации о типе во время выполнения, например typeid .
Примеры
[ редактировать ]В нестандартном (GNU) расширении языка программирования C typeof может использоваться для определения общего макроса для определения максимального значения двух параметров:
#define max(a,b) ({ typeof (a) _a = (a); typeof (b) _b = (b); _a > _b ? _a : _b; })
В С# :
// Given an object, returns if it is an integer.
// The "is" operator can be also used to determine this.
public static bool IsInteger(object o)
{
return o.GetType() == typeof(int);
}
Начиная с C23, typeof является частью стандарта C. Также был добавлен оператор typeof_unqual, который аналогичен typeof, за исключением того, что он удаляет cvr-квалификацию и атомарную квалификацию. [6] [7] В VB.NET вариант typeof на C# следует преобразовать в метод GetType VB.NET . Ключевое слово TypeOf в VB.NET используется для сравнения переменной ссылки на объект с типом данных.
В следующем примере выражения TypeOf...Is используются для проверки совместимости типов двух ссылочных переменных объекта с различными типами данных.
Dim refInteger As Object = 2
MsgBox("TypeOf Object[Integer] Is Integer? " & TypeOf refInteger Is Integer)
MsgBox("TypeOf Object[Integer] Is Double? " & TypeOf refInteger Is Double)
Dim refForm As Object = New System.Windows.Forms.Form
MsgBox("TypeOf Object[Form] Is Form? " & TypeOf refForm Is System.Windows.Forms.Form)
MsgBox("TypeOf Object[Form] Is Label? " & TypeOf refForm Is System.Windows.Forms.Label)
MsgBox("TypeOf Object[Form] Is Control? " & TypeOf refForm Is System.Windows.Forms.Control)
MsgBox("TypeOf Object[Form] Is IComponent? " & TypeOf refForm Is System.ComponentModel.IComponent)
В JavaScript :
function isNumber(n)
{
return ( typeof n === 'number' );
}
В TypeScript : [8]
function (param: typeof existingObject) { ... }
let newObject: typeof existingObject;
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Оператор TypeOf (Visual Basic)» . MSDN . Архивировано из оригинала 28 ноября 2016 г.
- ^ "typeof (C#)" . MSDN . Архивировано из оригинала 10 сентября 2016 г.
- ^ «Объявления — Язык программирования D 1.0» . Цифровой Марс . 30 декабря 2012 г. Архивировано из оригинала 7 октября 2023 г.
- ^ « Typeof » в «Использовании коллекции компиляторов GNU».
- ^ Менейд, ЖанХейд (07 марта 2021 г.). «Не так уж и волшебно — typeof(…) в C | r2» . Открытые стандарты . Проверено 2 декабря 2021 г.
- ^ «N2927: Не так уж и волшебно — typeof для C» . Открытые стандарты . 2022-02-02. Архивировано из оригинала 1 декабря 2023 года.
- ^ «Рассмотрите возможность переименования Remove_quals» (PDF) . Открытые стандарты . 06.02.2022. Архивировано (PDF) из оригинала 17 февраля 2024 г.
- ^ «Использование 'typeof' для определения типа» . Изучите TypeScript . Проверено 28 января 2022 г.