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ů:
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.
Počet parametrů. Odstraňuje všechny přetížení definující jiný počet parametrů než jsou dodávány ve volání.
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í.
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.
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í.
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
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
Koncepty
Volitelné parametry (Visual Basic)
Procedura přetížení (Visual Basic)