Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Visual Basic fordítónak el kell döntenie, hogy melyik túlterhelést kell meghívnia, ha egy eljárás több túlterhelt verzióban van meghatározva. A következő lépések végrehajtásával dönt:
- Hozzáférhetőség. Kiküszöböli a túlterhelést olyan hozzáférési szinttel, amely megakadályozza a hívó kód meghívását.
- Paraméterek száma. Kiküszöböl minden olyan túlterhelést, amely a hívásban megadotttól eltérő számú paramétert határoz meg.
- Paraméter adattípusai. A fordító a példánymetelyeket részesíti előnyben a bővítménymetelyekkel szemben. Ha található olyan példánymetódus, amely csak szélesítő konverziókat igényel az eljáráshívás megfeleléséhez, akkor az összes kiterjesztési metódust elveti a rendszer. A fordítóprogram csak a példánymetódus-jelöltekkel folytatódik. Ha nem található ilyen példánymetódus, akkor a példány- és a bővítménymetódusokkal is folytatódik. Ebben a lépésben kiküszöböli azokat a túlterheléseket, amelyeknél a hívó argumentumok adattípusai nem konvertálhatók a túlterhelésben definiált paramétertípusokká.
- Konverziók szűkítése. Kiküszöböli azokat a túlterheléseket, amelyek a hívó argumentumtípusoktól a megadott paramétertípusokra való szűkítést igénylik. Ez a lépés megtörténik, függetlenül attól, hogy a típus-ellenőrző kapcsoló (Option Strict Statement)
OnvagyOff. - Minimális szélesítés. A fordító páronként veszi figyelembe a fennmaradó túlterheléseket. Minden pár esetében összehasonlítja a definiált paraméterek adattípusait. Ha az egyik túlterhelésben lévő típusok a másikban lévő megfelelő típusokra szélesednek, a fordító kiküszöböli az utóbbit. Vagyis megtartja a túlterhelést, amely a legkisebb mértékű szélesítést igényli.
- Túlterhelés feloldási prioritása. A fordító eltávolít minden olyan túlterhelést, amelynek OverloadResolutionPriorityAttribute értéke alacsonyabb, mint bármelyik lehetséges túlterhelés legmagasabb értéke. Az attribútum nélküli túlterhelések az alapértelmezett nulla értékhez vannak rendelve.
- Egyetlen jelölt. Továbbra is figyelembe veszi a páronkénti túlterheléseket, amíg csak egy túlterhelés marad, és ehhez az egyhez irányítja a hívást. Ha a fordító nem tudja egyetlen jelöltre csökkenteni a túlterhelést, hibát okoz.
Az alábbi ábra azt a folyamatot mutatja be, amely meghatározza, hogy a túlterhelt verziók közül melyiket kell meghívni.
Az alábbi példa ezt a túlterhelésfeloldási folyamatot szemlélteti.
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)
Az első hívás során a fordító megszünteti az első túlterhelést, mivel az első argumentum típusa (Short) a megfelelő paraméter típusára (Byte) szűkül. Ezzel kiküszöböli a harmadik túlterhelést, mivel a második túlterhelés minden argumentumtípusa (Short és Single) a harmadik túlterhelés megfelelő típusára (Integer és Single) szélesedik. A második túlterhelés kisebb szélesítést igényel, ezért a fordító azt használja a híváshoz.
A második hívásban a fordító nem tudja kiküszöbölni a túlterhelési lehetőségeket a szűkítés alkalmazása alapján. A harmadik túlterhelést ugyanazért szünteti meg, mint az első hívásban, mivel a második túlterhelést az argumentumtípusok kevésbé szélesítésével hívhatja meg. A fordító azonban nem tud dönteni az első és a második túlterhelt függvény között. Mindegyiknek van egy definiált paramétertípusa, amely a másikban a megfelelő típusra szélesít (ByteShort, de Single a Double). A fordító ezért generál egy túlterhelés-feloldási hibát.
Túlterhelt Optional és ParamArray argumentumok
Ha egy eljárás két túlterhelése azonos aláírással rendelkezik, azzal a kivételével, hogy az utolsó paraméter deklarálva van Választható az egyikben, a másikban pedig ParamArray, a fordító az alábbi módon oldja fel az eljárás hívását:
| Ha a hívás megadja az utolsó argumentumot | A fordító a túlterhelés hívását az utolsó argumentumot deklaráló módon oldja fel. |
|---|---|
| Nincs érték (argumentum nincs megadva) | Optional |
| Egyetlen érték | Optional |
| Két vagy több érték vesszővel tagolt listában | ParamArray |
| Tetszőleges hosszúságú tömb (beleértve az üres tömböt is) | ParamArray |
Lásd még:
- választható paraméterek
- paramétertömbök
- Metódus túlterhelés
- hibaelhárítási eljárások
- Útmutató: Eljárás több verziójának definiálása
- Hogyan hívjunk meg egy túlterhelt eljárást
- Útmutató: Eljárás túlterhelése, amely opcionális paramétereket fogad el
- Útmutató: Olyan eljárás túlterhelése, amely határozatlan számú paramétert
- Szempontok a túlterhelési eljárásoknál
- túlterhelések
- bővítési metódusok