Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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
ByVallubByRef, 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
TaxClassklasy .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 ClassDodaj 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 SubDodaj przycisk do formularza i wywołaj
ShowTaxprocedurę zeButton1_Clickzdarzenia przycisku.Uruchom projekt i kliknij przycisk na formularzu, aby przetestować przeciążoną
ShowTaxprocedurę.
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".