Sdílet prostřednictvím


Aspekty přetížení procedur (Visual Basic)

Při přetížení procedury musíte pro každou přetíženou verzi použít jiný podpis . Obvykle to znamená, že každá verze musí zadat jiný seznam parametrů. Další informace naleznete v části "Jiný podpis" v přetížení procedury.

Proceduru Function můžete přetížit postupem Sub a naopak za předpokladu, že mají různé podpisy. Dvě přetížení se nemohou lišit pouze v tom, že jedna má návratovou hodnotu a druhá ne.

Vlastnost můžete přetížit stejným způsobem jako proceduru a se stejnými omezeními. Nelze však přetížit proceduru vlastností nebo naopak.

Alternativy k přetíženým verzím

Někdy máte alternativy k přetíženým verzím, zejména pokud je přítomnost argumentů nepovinná nebo jejich číslo je proměnné.

Mějte na paměti, že volitelné argumenty nemusí nutně podporovat všechny jazyky a pole parametrů jsou omezena na Jazyk Visual Basic. Pokud píšete proceduru, která bude pravděpodobně volána z kódu napsaného v některém z několika různých jazyků, přetížené verze nabízejí největší flexibilitu.

Přetížení a volitelné argumenty

Pokud volající kód může volitelně zadat nebo vynechat jeden nebo více argumentů, můžete definovat více přetížených verzí nebo použít volitelné parametry.

Kdy použít přetížené verze

V následujících případech můžete zvážit definování řady přetížených verzí:

  • Logika v kódu procedury se výrazně liší v závislosti na tom, jestli volající kód poskytuje volitelný argument, nebo ne.

  • Kód procedury nemůže spolehlivě otestovat, zda volající kód zadal volitelný argument. Jedná se například o případ, kdy neexistuje možného kandidáta na výchozí hodnotu, kterou volající kód nemohl zadat.

Kdy použít volitelné parametry

V následujících případech můžete preferovat jeden nebo více volitelných parametrů:

  • Jedinou požadovanou akcí v případě, že volající kód nezadává volitelný argument, je nastavit parametr na výchozí hodnotu. V takovém případě může být kód procedury méně složitý, pokud definujete jednu verzi s jedním nebo více Optional parametry.

Další informace naleznete v tématu Volitelné parametry.

Přetížení a ParamArrays

Když volající kód může předat proměnný počet argumentů, můžete definovat více přetížených verzí nebo použít pole parametrů.

Kdy použít přetížené verze

V následujících případech můžete zvážit definování řady přetížených verzí:

  • Víte, že volající kód nikdy nepředá více než malý počet hodnot do pole parametrů.

  • Logika v kódu procedury se výrazně liší v závislosti na tom, kolik hodnot volající kód předá.

  • Volající kód může předávat hodnoty různých datových typů.

Kdy použít pole parametrů

Parametr vám bude lépe obsluhovat ParamArray v následujících případech:

  • Nemůžete předpovědět, kolik hodnot může volající kód předat do pole parametrů a může to být velké číslo.

  • Logika procedury se hodí k iteraci všemi hodnotami, které volající kód předává, a provádí v podstatě stejné operace pro každou hodnotu.

Další informace naleznete v tématu Pole parametrů.

Implicitní přetížení pro volitelné parametry

Procedura s volitelným parametrem je ekvivalentní dvěma přetíženým procedurě, jedné s volitelným parametrem a jedním bez něj. Takový postup nelze přetížit seznamem parametrů, který odpovídá některé z těchto procedur. Toto je znázorněno v následujících deklaracích.

Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)

Pro proceduru s více než jedním volitelným parametrem existuje sada implicitních přetížení, která byla doručena logikou podobnou té v předchozím příkladu.

Implicitní přetížení parametru ParamArray

Kompilátor považuje proceduru s parametrem ParamArray k nekonečnému počtu přetížení, které se liší od sebe v tom, co volající kód předává do pole parametrů následujícím způsobem:

  • Jedno přetížení pro, pokud volající kód neposkytuje argument do ParamArray

  • Jedno přetížení pro, když volající kód poskytuje jednorozměrné pole ParamArray typu prvku

  • Pro každé kladné celé číslo, jedno přetížení pro, když volající kód poskytuje tento počet argumentů, každý typ ParamArray prvku

Následující deklarace ilustrují tato implicitní přetížení.

Overloads 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.

Takový postup nelze přetížit seznamem parametrů, který přebírá jednorozměrné pole pro pole parametrů. Můžete však použít podpisy ostatních implicitních přetížení. Toto je znázorněno v následujících deklaracích.

' 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)

Programování bez typů jako alternativa k přetížení

Pokud chcete volajícímu kódu povolit předávání různých datových typů parametru, je alternativním přístupem programování bez typů. Přepínač kontroly Off typů můžete nastavit pomocí příkazu Option Strict nebo parametru -optionstrict kompilátoru. Pak nemusíte deklarovat datový typ parametru. Tento přístup má však v porovnání s přetížením následující nevýhody:

  • Programování bez typů vytváří méně efektivní kód provádění.

  • Tento postup musí testovat pro každý datový typ, který očekává, že bude předán.

  • Kompilátor nemůže signalizovat chybu, pokud volající kód předává datový typ, který procedura nepodporuje.

Viz také