Книга: «1С:Предприятие.Элемент». Возможности встроенного языка
Назад: Позиционные и именованные аргументы
Дальше: Разрешение неоднозначности при использовании именованных аргументов

Перегрузка методов

В языке «1С:Предприятия» нельзя было объявить процедуру/функцию с тем же именем, которое уже существовало у другой процедуры/функции, даже если у них было разное количество параметров.

Теперь в языке «Элемента» можно повторно определить метод с тем же именем, но с разным составом (типом и/или количеством) параметров. Такие методы называются перегруженными.

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

Например, перегруженный метод (вариант 2) по сравнению с уже существующим (вариант 1) может возвращать значение того же типа Строка, но содержать два параметра вместо одного:

метод МойМетод()

// 1-й вариант

Результат = Метод1("Ок") //Результат: "Ок"

// 2-й вариант

Результат = Метод1(7, "Ок") //Результат: "Ок"

;

// 1-й вариант

метод Метод1(Парам1: Строка): Строка

возврат Парам1

;

// 2-й вариант

метод Метод1(Парам1: Число, Парам2: Строка): Строка

возврат Парам2

;

Или же перегруженный метод (вариант 3) может отличаться от существующего (вариант 1) и типом возвращаемого значения (Число вместо Строка), и количеством параметров (два вместо одного):

метод МойМетод()

// 1-й вариант

Результат = Метод1("Ок") //Результат: "Ок"

// 3-й вариант

Результат = Метод1(7, "Ок") //Результат: 7

;

// 1-й вариант

метод Метод1(Парам1: Строка): Строка

возврат Парам1

;

// 3-й вариант

метод Метод1(Парам1: Число, Парам2: Строка): Число

возврат Парам1

;

Можно также определить перегруженный метод (вариант 2), который будет отличаться от существующего (вариант 1) не количеством, а только типом параметров (Число вместо Строка):

метод МойМетод()

// 1-й вариант

Метод1("Ок")

// 2-й вариант

Метод1(7)

;

// 1-й вариант

метод Метод1(Парам1: Строка)

//Парам1 = "Ок"

;

// 2-й вариант

метод Метод1(Парам1: Число)

//Парам1 = 7

;

Если определить используемый вариант метода во время компиляции не представляется возможным, произойдет ошибка компиляции.

Например, нельзя создать перегруженный метод, у которого тип одного параметра совпадает с типом параметра исходного метода, а второй параметр имеет значение по умолчанию. При компиляции будет получена ошибка неоднозначности, в этом случае любой из методов можно вызвать, указав только один параметр:

//ошибка компиляции – перегрузка метода допускает неоднозначный вызов

метод Метод1(Парам1: Строка)

метод Метод1(Парам1: Строка, Парам2 = 22)

Также нельзя создать перегруженный метод, у которого тип параметра (Строка) является наследником типа параметра исходного метода (Объект):

//ошибка компиляции – перегрузка метода допускает неоднозначный вызов

метод Метод1(Парам1: Объект)

метод Метод1(Парам1: Строка)

Также нельзя создать перегруженный метод, у которого параметр описан с использованием составного типа, при этом в каждом варианте метода в типе параметра присутствует один и тот же тип (Строка):

//ошибка компиляции – перегрузка метода допускает неоднозначный вызов

метод Метод1(Парам1: Строка|Булево)

метод Метод1(Парам1: Строка)

// или

метод Метод1(Парам1: Строка|Булево)

метод Метод1(Парам1: Строка|Число)

Как уже говорилось, нельзя, чтобы перегруженные методы отличались только типом возвращаемого значения:

//ошибка компиляции – перегрузка метода допускает неоднозначный вызов

метод Метод1(Парам1: Число): Строка

метод Метод1(Парам1: Число): Число

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

Назад: Позиционные и именованные аргументы
Дальше: Разрешение неоднозначности при использовании именованных аргументов