Перегруженные свойства и методы (Visual Basic)
Перегрузка — создание нескольких процедур, конструктора экземпляра или свойства в классе с одинаковым именем, но разными типами аргументов.
Перегрузка использования
Перегрузка особенно полезна, если объектная модель диктует одинаковые имена для процедур, работающих с различными типами данных. Например, класс, который может отображать несколько различных типов данных, может иметь 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".