Udostępnij za pomocą


Jak: Przeciążenie procedury, która przyjmuje nieokreśloną liczbę parametrów (Visual Basic)

Jeśli procedura ma parametr ParamArray , nie można zdefiniować przeciążonej wersji biorącej tablicę jednowymiarową dla tablicy parametrów. Aby uzyskać więcej informacji, zobacz sekcję "Niejawne przeciążenia parametru ParamArray" w temacie Zagadnienia dotyczące przeciążania procedur.

Aby przeciążyć procedurę, która przyjmuje zmienną liczbę parametrów

  1. Należy upewnić się, że procedura oraz logika kodu wywołującego czerpie większe korzyści z przeciążonych wersji niż z parametru ParamArray. Zobacz "Przeciążenia i tablice parametrów" w Zagadnienia dotyczące przeciążania procedur.

  2. Ustal, które liczby podanych wartości procedura powinna zaakceptować w zmiennej części listy parametrów. Może to obejmować przypadek braku wartości, a także przypadek pojedynczej tablicy jednowymiarowej.

  3. Dla każdej dopuszczalnej liczby podanych wartości napisz instrukcję deklaracji Sub lub Function, która definiuje odpowiednią listę parametrów. Nie należy używać ani słowa kluczowego Optional, ani ParamArray w tej przeciążonej wersji.

  4. W każdej deklaracji poprzedź słowo kluczowe Sub lub Function słowem kluczowym Przeciążenie.

  5. Po każdej deklaracji napisz kod procedury, który powinien zostać wykonany, gdy kod wywołujący dostarcza wartości odpowiadające liście parametrów tej deklaracji.

  6. W razie potrzeby zakończ każdą procedurę za pomocą instrukcji End Sub or End Function .

Przykład

W poniższym przykładzie przedstawiono procedurę zdefiniowaną za pomocą parametru ParamArray , a następnie równoważny zestaw przeciążonych procedur.

Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

Nie można przeciążyć takiej procedury, używając listy parametrów, która przyjmuje jednowymiarową tablicę jako tablicę parametrów. Można jednak używać sygnatur innych niejawnych przeciążeń. Poniższe deklaracje ilustrują to.

' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

Kod w przeciążonych wersjach nie musi sprawdzać, czy kod wywołujący dostarczył jedną lub więcej wartości dla parametru ParamArray, ani jeśli tak, ile ich było. Język Visual Basic przekazuje kontrolę do wersji zgodnej z listą argumentów wywołujących.

Kompilowanie kodu

Ponieważ procedura z parametrem ParamArray jest równoważna zestawowi przeciążonych wersji, nie można przeciążyć takiej procedury listą parametrów odpowiadającą żadnym z tych niejawnych przeciążeń. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące przeciążania procedur.

Zabezpieczenia programu .NET Framework

Za każdym razem, gdy zajmujesz się tablicą, która może być nieskończenie duża, istnieje ryzyko przekroczenia pewnej wewnętrznej pojemności aplikacji. Jeśli akceptujesz tablicę parametrów, powinieneś sprawdzić długość tablicy przekazanej przez kod wywołujący i podjąć odpowiednie kroki, jeśli jest zbyt duża dla twojej aplikacji.

Zobacz także