&Перегрузка

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

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

Перфолента.Net - язык со статической типизацией. Поэтому каждый параметр метода имеет строго заданный тип. Но что делать, если метод должен принимать значения нескольких типов?

Существует 3 варианта решения:

  • Создать несколько методов с различными именами, включающими имя принимаемого типа. Например, ЗаписатьЦелое(Ц тип Целое), ЗаписатьЧисло(Ч тип Число), ЗаписатьСтроку(Стр тип Строка). Такой способ применяется в языке 1С, т.к. в нем нет перегрузки методов.
  • Создать один метод принимающий параметр типа Объект. Например, Записать(О тип Объект).
  • Создать несколько методов с одним именем, но с параметрами разного типа. Именно этот способ называется перегрузкой методов.

Модуль МойМодуль

   //перегруженные методы имеют одинаковое имя, но различные наборы параметров
   //атрибут Перегрузка не обязательный
   &Перегрузка
   Процедура Записать(Ц тип Целое)
       //код метода        
   КонецПроцедуры    
   &Перегрузка
   Процедура Записать(Ч тип Число)
       //код метода        
   КонецПроцедуры    
   &Перегрузка
   Процедура Записать(Стр тип Строка, ВВерхнемРегистре тип Булево)
       //код метода        
   КонецПроцедуры    
КонецМодуля    

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

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