В языке «1С:Предприятия» все типы были независимы друг от друга, между ними не существовало никаких связей.
Теперь в языке «Элемента» все типы имеют строгую иерархию. В основании иерархии типов лежит тип Объект. Этот тип является базовым для всех типов, кроме типа Неопределено.
При этом потомок какого-либо типа наследует контракт своего предка (набор операций, которые можно выполнять над данными, принадлежащими этому типу), но каким-либо образом расширяет или допустимые значения, или контракт, или оба этих параметра.
Таким образом, если какой-то тип является потомком типа Обходимое, то значения такого типа можно обходить (например в цикле для…из). Если тип является потомком типа Сравнимое, то значения такого типа могут участвовать в операциях сравнения, и т. д.
Предка какого-либо типа также можно назвать его базовым типом, а потомка от него – производным типом. У одного типа может быть несколько базовых типов.
Для определения и сравнения типов, а также для получения информации о иерархии типов в языке «Элемента» существует специальный тип Тип. У каждого из производных типов существует метод ПолучитьТип(), который возвращает значение типа Тип.
Чтобы получить список базовых типов конкретного типа, у экземпляра типа Тип используется свойство БазовыеТипы. Например:
пер БазовыеТипы = СобратьПредков(Тип<Число>)
метод СобратьПредков(Значение: Тип, Предки: Множество<Тип> = {}): Множество<Тип>
для БазовыйТип из Значение.БазовыеТипы
Предки.Добавить(БазовыйТип)
СобратьПредков(БазовыйТип, Предки)
;
возврат Предки
;
У типа Число список базовых типов будет иметь вид (рис. 2.1):
Рис. 2.1. Список базовых типов у типа «Число»
У типа Булево список базовых типов будет иметь вид (рис. 2.2):
Рис. 2.2. Список базовых типов у типа «Булево»
У типа Массив<Число> список базовых типов будет иметь вид (рис. 2.3):
Рис. 2.3. Список базовых типов у типа «Массив<Число>»
Переменной базового типа можно присвоить значение производного типа, но обратное присваивание невозможно. Например:
пер Переменная1: Сравнимое<Число> = 33
пер Переменная2: Число = 11
Переменная1 = Переменная2
При вызове системного обобщенного метода в угловых скобках также можно опционально указать, что параметр метода может быть наследником определенного типа. В следующем примере указывается, например, что параметры метода Мин() могут быть только наследниками типа Сравнимое:
пер Переменная1 = Мин<Сравнимое<Число>>(11, 7, 13) // результат = 7
пер Переменная2 = Мин<Сравнимое<Строка>>("90", "66", "82") // результат = «66»
пер Переменная3 = Мин<Сравнимое<Булево>>(Ложь, Истина) // результат = false
подробнее
Подробнее про обобщенные методы будет рассказано в 3-й главе в разделе «».