Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Перегрузка — создание нескольких процедур, конструктора экземпляра или свойства в классе с одинаковым именем, но разными типами аргументов.
Чрезмерное использование
Перегрузка особенно полезна, если объектная модель диктует одинаковые имена для процедур, работающих с различными типами данных. Например, класс, который может отображать несколько различных типов данных, может иметь Display
процедуры, которые выглядят следующим образом:
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
Без перегрузки необходимо создать отдельные имена для каждой процедуры, даже если они выполняют то же самое, как показано далее:
Sub DisplayChar(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
Перегрузка упрощает использование свойств или методов, так как предоставляет выбор типов данных, которые можно использовать. Например, перегруженный Display
метод, описанный ранее, можно вызвать с помощью любой из следующих строк кода:
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)
Во время выполнения Visual Basic вызывает правильную процедуру на основе типов данных указанных параметров.
Правила перегрузки
Вы создаете перегруженный член для класса, добавив два или более свойств или методов с одинаковым именем. За исключением производных членов с перегрузкой, каждый перегруженный член должен иметь разные списки параметров, и следующие элементы нельзя использовать в качестве отличительной характеристики при перегрузке свойства или процедуры:
Модификаторы, например
ByVal
илиByRef
, которые применяются к члену или параметрам элемента.Имена параметров
Возвращаемые типы процедур
Ключевое Overloads
слово является необязательным при перегрузке, но если какой-либо перегруженный член использует Overloads
ключевое слово, то все остальные перегруженные члены с тем же именем также должны указывать это ключевое слово.
Производные классы могут скрывать наследуемые элементы членами с идентичными параметрами и типами параметров, процесс, известный как скрытие по имени и сигнатуре.
Overloads
Если ключевое слово используется при сокрытии по имени и сигнатуре, будет использоваться реализация производного класса вместо реализации в базовом классе, и все остальные перегрузки для этого члена будут доступны экземплярам производного класса.
Overloads
Если ключевое слово опущено при перегрузке унаследованного члена членом, который имеет идентичные параметры и типы параметров, перегрузка называется скрытием по имени. Скрытие по имени заменяет унаследованную реализацию члена и делает все остальные перегрузки недоступными для экземпляров производного класса и его потомков.
Модификаторы Overloads
и Shadows
не могут использоваться одновременно с одним и тем же свойством или методом.
Пример
В следующем примере создаются перегруженные методы, принимающие String
или Decimal
представление суммы доллара и возвращающие строку, содержащую налог на продажу.
Использование этого примера для создания перегруженного метода
Откройте новый проект и добавьте класс с именем
TaxClass
.Добавьте в класс
TaxClass
приведенный далее код.Public Class TaxClass Overloads Function TaxAmount(ByVal decPrice As Decimal, ByVal TaxRate As Single) As String TaxAmount = "Price is a Decimal. Tax is $" & (CStr(decPrice * TaxRate)) End Function Overloads Function TaxAmount(ByVal strPrice As String, ByVal TaxRate As Single) As String TaxAmount = "Price is a String. Tax is $" & CStr((CDec(strPrice) * TaxRate)) End Function End Class
Добавьте следующую процедуру в форму.
Sub ShowTax() ' 8% tax rate. Const TaxRate As Single = 0.08 ' $64.00 Purchase as a String. Dim strPrice As String = "64.00" ' $64.00 Purchase as a Decimal. Dim decPrice As Decimal = 64 Dim aclass As New TaxClass 'Call the same method with two different kinds of data. MsgBox(aclass.TaxAmount(strPrice, TaxRate)) MsgBox(aclass.TaxAmount(decPrice, TaxRate)) End Sub
Добавьте кнопку в форму и вызовите процедуру
ShowTax
из события нажатия кнопкиButton1_Click
.Запустите проект и нажмите кнопку в форме, чтобы проверить перегруженную
ShowTax
процедуру.
Во время выполнения компилятор выбирает соответствующую перегруженную функцию, которая соответствует используемым параметрам. При нажатии кнопки перегруженный метод вызывается сначала с Price
параметром, который является строкой, и сообщением "Цена является строкой. Отображается налог: $5,12.
TaxAmount
вызывается с Decimal
значением во второй раз и сообщением "Цена является десятичным числом. Отображается налог: $5,12.