Sdílet prostřednictvím


Rozlišení přetěžování (Visual Basic)

Když Visual Basic kompilátor narazí volání postup, který je definován v několika verzích přetížené, kompilátor musíte rozhodnout, které přetížení volání.Je to provedením následujících kroků:

  1. Usnadnění přístupu. Odstraňuje všechny přetížení s úrovní přístupu, který brání volání, je volající kód.

  2. Počet parametrů. Odstraňuje všechny přetížení definující jiný počet parametrů než jsou dodávány ve volání.

  3. Datové typy parametrů. Kompilátor dává přednost metody instance přes rozšíření metody.Pokud jakákoli metoda instance, který vyžaduje pouze rozšiřování převody odpovídající volání procedury nalezen, jsou vynechány všechny metody rozšíření a kompilátor pokračuje pouze zájemci metodu instance.Pokud je nalezena metoda instance, pokračuje s instancí a metod rozšíření.

    V tomto kroku odstraňuje jakékoli přetížení, pro které typy dat argumentů volajícího nelze převést na typy parametrů, které jsou definovány v přetížení.

  4. Zužujícího převodu. Odstraňuje všechny přetížení, který vyžaduje zužujícího převodu z volání typy argumentů typů definovaný parametr.Je to zda kontrola typu přepínače (Option Strict – příkaz) je On nebo Off.

  5. Nejméně rozšiřování. Kompilátor za zbývající přetížení ve dvojicích.Pro každou dvojici porovnává datové typy definované parametry.Pokud v jednom z přetížení, všechny typy rozšířit na odpovídající typy v druhé, kompilátor eliminuje tento.Zachová přetížení, který vyžaduje nejméně o rozšiřování.

  6. Jediného kandidáta. Pokračuje considering přetížení ve dvojicích až pouze jeden přetěžování zůstává a je řeší volání dané přetížení.Kompilátor nemůže snížit přetížení do jediného kandidáta, vygeneruje chybu.

Následující obrázek znázorňuje proces, který určuje, které sadu volání přetížených verzí.

Řešení mezi přetížené verze

Diagram průběhu procesu řešení přetížení

Následující příklad ilustruje tento proces řešení přetížení.

Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub 
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub 
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub
Dim r, s As Short 
Call z(r, s)
Dim p As Byte, q As Short 
' The following statement causes an overload resolution error. 
Call z(p, q)

První volání kompilátor eliminuje přetížení první typ první argument (Short) zúží odpovídajícího parametru typu (Byte).Pak díky třetí přetížení protože každý argument zadejte druhou přetížením (Short a Single) rozšiřuje odpovídající typu v třetí přetížením (Integer a Single).Druhý přetížení vyžaduje méně rozšiřování kompilátor používá pro volání.

V druhé volání kompilátor nelze vyloučit všechny přetížení na základě zúžení.To eliminuje třetí přetížení ze stejného důvodu jako v první volání může volat druhé přetížení s méně rozšiřování typy argumentů.Kompilátor nemůže však vyřešit mezi první a druhý přetížení.Každý má jeden parametr definovaný typ, který rozšiřuje odpovídající typu v druhé (Byte na Short, ale Single na Double).Kompilátor generuje proto při řešení přetížení.

Přetížení volitelné a argumenty ParamArray

Pokud dva přetížení postup identickými podpisy s výjimkou, že je deklarována jako poslední parametr Nepovinné (Visual Basic) v jedné a ParamArray (Visual Basic) v jiných, kompilátor řeší volání, že takto:

Pokud hovor dodává jako poslední argument

Kompilátor řeší volání přetížení deklarování jako poslední argument

Žádná hodnota (argument vynechán)

Optional

Jedinou hodnotu.

Optional

Dvě nebo více hodnot v seznamu odděleném čárkami

ParamArray

Matice libovolnou délku (včetně prázdné pole)

ParamArray

Viz také

Úkoly

Řešení potíží s procedurami (Visual Basic)

Postupy: Definice více verzí procedury (Visual Basic)

Postupy: Volání přetížené procedury (Visual Basic)

Postupy: Přetížení procedury, která přebírá volitelné parametry (Visual Basic)

Postupy: Přetížení procedury, která přebírá nekonečný počet parametrů (Visual Basic).

Referenční dokumentace

Přetížení (Visual Basic)

Koncepty

Volitelné parametry (Visual Basic)

Pole parametrů (Visual Basic)

Procedura přetížení (Visual Basic)

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

Metody rozšíření (Visual Basic)