ПОНЯТНО О Visual Basic NET (том 3)


Перегрузка


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

Этот термин применим не только к процедурам, но и к функциям, и к свойствам, и к конструкторам.

С перегрузкой мы в этой книге встречались не раз. Перелистайте книжку назад и загляните в 6.2.8. Там вы увидите 4 варианта метода DrawLine класса Graphics. Все эти варианты различались количеством или типом параметров метода. Программист мог выбирать вариант по вкусу или по возможностям.

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

Public Class Участок

    Public Владелец As String

    Public Высота_забора As Integer

    Public Shared Расход_краски_на_кв_м As Integer

 

    Public Function Периметр(ByVal Длина As Integer, ByVal Ширина As Integer) As Integer

        Return 2 * (Длина + Ширина)

    End Function

 

    Public Function Площадь_забора(ByVal Длина As Integer, ByVal Ширина As Integer) As Integer

        Return Периметр(Длина, Ширина) * Высота_забора

    End Function

 

    Public Function Расход_краски_на_забор(ByVal Длина As Integer, ByVal Ширина As Integer) As Integer

        Return Расход_краски_на_кв_м * Площадь_забора(Длина, Ширина)

    End Function

End Class

Обратите внимание вот на что. Мы отказались от полей Длина и Ширина, так как  теперь объект получает их значения в виде параметров. Теперь извне мы должны обращаться к функциям с указанием параметров, например, так:

        Debug.WriteLine(Участок1.Расход_краски_на_забор(100, 50))

Это в чем-то удобно, в чем-то – нет. Неудобно, в частности, вот в чем. Если мы захотим включить параметры только в функцию периметра, оставив две другие функции без параметров, у нас ничего не получится. Ведь в тело функции Площадь_забора входит вызов функции Периметр с параметрами, а откуда взять их значения, если нет полей? Только из собственных параметров. По той же причине придется снабдить параметрами и функцию Расход_краски_на_забор.




Начало  Назад  Вперед