Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przeciążenie to tworzenie więcej niż jednej procedury, konstruktora wystąpienia lub właściwości w klasie o tej samej nazwie, ale różnych typach argumentów.
Przeciążenie użytkowania
Przeciążenie jest szczególnie przydatne, gdy model obiektów określa, że stosujesz identyczne nazwy procedur działających na różnych typach danych. Na przykład klasa, która może wyświetlać kilka różnych typów danych, może mieć Display
procedury, które wyglądają następująco:
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
Bez przeciążenia należy utworzyć odrębne nazwy dla każdej procedury, mimo że są one takie same, jak pokazano poniżej:
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
Przeciążenie ułatwia korzystanie z właściwości lub metod, ponieważ zapewnia wybór typów danych, których można użyć. Na przykład przeciążona metoda omówiona Display
wcześniej może być wywoływana przy użyciu dowolnego z następujących wierszy kodu:
' 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)
W czasie wykonywania program Visual Basic wywołuje prawidłową procedurę na podstawie typów danych podanych parametrów.
Przeciążanie reguł
Przeciążony członek klasy można utworzyć, dodając co najmniej dwie właściwości lub metody o tej samej nazwie. Z wyjątkiem przeciążonych elementów pochodnych, każdy przeciążony element członkowski musi mieć różne listy parametrów, a następujące elementy nie mogą być używane jako funkcja różnicowania podczas przeciążania właściwości lub procedury:
Modyfikatory, takie jak
ByVal
lubByRef
, mają zastosowanie do elementu członkowskiego lub parametrów elementu członkowskiego.Nazwy parametrów
Zwracanie typów procedur
Słowo kluczowe Overloads
jest opcjonalne podczas przeciążenia, ale jeśli jakikolwiek przeciążony członek używa słowa kluczowego Overloads
, wtedy wszystkie inne przeciążone członki o tej samej nazwie muszą również określać to słowo kluczowe.
Klasy pochodne mogą przeciążać dziedziczone składowe stosując elementy członkowskie, które mają identyczne parametry i typy parametrów, co jest procesem znanym jako zasłanianie według nazwy i sygnatury.
Overloads
Jeśli słowo kluczowe jest używane podczas cieniowania według nazwy i podpisu, implementacja klasy pochodnej składowej zostanie użyta zamiast implementacji w klasie bazowej, a wszystkie inne przeciążenia dla tego elementu członkowskiego będą dostępne dla wystąpień klasy pochodnej.
Overloads
Jeśli słowo kluczowe zostanie pominięte podczas przeciążenia dziedziczonego elementu członkowskiego z elementem członkowskim, który ma identyczne parametry i typy parametrów, przeciążenie jest nazywane cieniowaniem według nazwy. Zaciemnianie według nazwy zastępuje dziedziczoną implementację członka i sprawia, że wszystkie inne przeciążenia są niedostępne dla wystąpień klasy pochodnej i jej potomków.
Modyfikatory Overloads
i Shadows
nie mogą być używane z tą samą właściwością lub metodą.
Przykład
Poniższy przykład tworzy przeciążone metody, które akceptują zarówno String
, jak i Decimal
reprezentację kwoty w dolarach i zwracają ciąg zawierający podatek od sprzedaży.
Aby użyć tego przykładu do utworzenia metody przeciążonej
Otwórz nowy projekt i dodaj klasę o nazwie
TaxClass
.Dodaj następujący kod do
TaxClass
klasy .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
Dodaj następującą procedurę do formularza.
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
Dodaj przycisk do formularza i wywołaj
ShowTax
procedurę zeButton1_Click
zdarzenia przycisku.Uruchom projekt i kliknij przycisk na formularzu, aby przetestować przeciążoną
ShowTax
procedurę.
W czasie wykonywania kompilator wybiera odpowiednią przeciążoną funkcję zgodną z używanymi parametrami. Po kliknięciu przycisku przeciążona metoda jest wywoływana jako pierwsza z parametrem Price
, który jest ciągiem i komunikatem "Cena jest ciągiem. Zostanie wyświetlony podatek o wartości 5,12 USD".
TaxAmount
jest wywołana z wartością Decimal
po raz drugi, a komunikat brzmi: "Cena jest liczbą dziesiętną". Zostanie wyświetlony podatek o wartości 5,12 USD".