Поделиться через


Перегруженные свойства и методы (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 представление суммы доллара и возвращающие строку, содержащую налог на продажу.

Использование этого примера для создания перегруженного метода

  1. Откройте новый проект и добавьте класс с именем TaxClass.

  2. Добавьте в класс 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
    
  3. Добавьте следующую процедуру в форму.

    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
    
  4. Добавьте кнопку в форму и вызовите ShowTax процедуру из Button1_Click события кнопки.

  5. Запустите проект и нажмите кнопку в форме, чтобы проверить перегруженную ShowTax процедуру.

Во время выполнения компилятор выбирает соответствующую перегруженную функцию, которая соответствует используемым параметрам. При нажатии кнопки перегруженный метод вызывается сначала с Price параметром, который является строкой, и сообщением "Цена является строкой. Отображается налог на $5,12". TaxAmount вызывается со Decimal значением второго раза и сообщением "Цена — десятичная. Отображается налог на $5,12".

См. также