Objektumváltozó deklarációja (Visual Basic)
Egy objektumváltozó deklarálásához normál deklarációs utasítást használ. Az adattípushoz meg kell adnia az Object
objektum adattípusát vagy egy konkrétabb osztályt, amelyből létre kívánja hozni az objektumot.
A változó Object
deklarálása megegyezik a deklarálással.System.Object
Ha egy adott objektumosztálysal rendelkező változót deklarál, az hozzáfér az adott osztály által közzétett összes metódushoz és tulajdonsághoz, valamint azokhoz az osztályokhoz, amelyektől örökli. Ha a változót Objectdeklarálja, csak az Object osztály tagjai férhetnek hozzá, hacsak nem engedélyezi Option Strict Off
a késői kötést.
Deklaráció szintaxisa
Objektumváltozó deklarálásához használja az alábbi szintaxist:
Dim variablename As [New] { objectclass | Object }
A deklarációban megadhatja a Nyilvános, a Védett, a Barát, Protected Friend
a Privát, a Megosztott vagy a Statikus értéket is. A következő példadeklarációk érvényesek:
Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem
Késői kötés és korai kötés
Előfordulhat, hogy az adott osztály ismeretlen, amíg a kód le nem fut. Ebben az esetben deklarálnia kell az objektumváltozót az Object
adattípussal. Ez létrehoz egy általános hivatkozást bármilyen típusú objektumra, és az adott osztály futásidőben van hozzárendelve. Ezt késői kötésnek nevezzük. A késői kötés további végrehajtási időt igényel. Emellett a kódot a legutóbb hozzárendelt osztály metódusaira és tulajdonságaira korlátozza. Ez futásidejű hibákat okozhat, ha a kód egy másik osztály tagjaihoz próbál hozzáférni.
Ha fordításkor ismeri az adott osztályt, deklarálnia kell az objektumváltozót az adott osztályhoz. Ezt korai kötésnek nevezzük. A korai kötés javítja a teljesítményt, és garantálja a kód hozzáférését az adott osztály összes metódusához és tulajdonságához. Az előző példában szereplő deklarációkban, ha a változó objA
csak osztályobjektumokat System.Windows.Forms.Labelhasznál, a deklarációban meg kell adnia As System.Windows.Forms.Label
.
A korai kötés előnyei
Az objektumváltozók adott osztályként való deklarálása számos előnnyel jár:
Automatikus típusellenőrzés
Garantált hozzáférés az adott osztály összes tagjának
A Microsoft IntelliSense támogatása a Kódszerkesztőben
A kód olvashatóságának javítása
Kevesebb hiba a kódban
A fordítási időpontban észlelt hibák futási idő helyett
Gyorsabb kódvégrehajtás
Hozzáférés az objektumváltozó-tagokhoz
Ha Option Strict
be van kapcsolva On
, az objektumváltozó csak annak az osztálynak a metódusait és tulajdonságait érheti el, amellyel deklarálja azt. Az alábbi példa ezt szemlélteti.
' Option statements must precede all other source file lines.
Option Strict On
' Imports statement must precede all declarations in the source file.
Imports System.Windows.Forms
Public Sub accessMembers()
Dim p As Object
Dim q As System.Windows.Forms.Label
p = New System.Windows.Forms.Label
q = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler ERROR.
j = p.Left
' The following statement retrieves the left edge of the label in pixels.
k = q.Left
End Sub
Ebben a példában p
csak az osztály tagjai Object használhatók, amelyek nem tartalmazzák a tulajdonságot Left
. Ezzel szemben a rendszer típusnak Labellett deklarálva, q
így a névtérben System.Windows.Forms az osztály összes metódusát és tulajdonságát Label használhatja.
Az objektumváltozók rugalmassága
Ha öröklési hierarchiában lévő objektumokkal dolgozik, kiválaszthatja, hogy melyik osztályt használja az objektumváltozók deklarálásához. A választás során ki kell egyensúlyoznia az objektum-hozzárendelés rugalmasságát az osztály tagjaihoz való hozzáféréssel szemben. Vegyük például az osztályhoz vezető öröklési hierarchiát System.Windows.Forms.Form :
Tegyük fel, hogy az alkalmazás definiál egy, specialForm
az osztálytól Formöröklő űrlaposztályt. Deklarálhat egy objektumváltozót, amely kifejezetten erre specialForm
hivatkozik, ahogy az alábbi példa is mutatja.
Public Class specialForm
Inherits System.Windows.Forms.Form
' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm
Az előző példában szereplő deklaráció az osztály specialForm
objektumaira korlátozza a változótnextForm
, de az összes metódust és tulajdonságot specialForm
is elérhetővé nextForm
teszi, valamint az összes olyan osztály minden tagját, amelytől specialForm
örököl.
Az objektumváltozót általánosabbá teheti, ha típusként Formdeklaráljuk, ahogy az alábbi példa is mutatja.
Dim anyForm As System.Windows.Forms.Form
Az előző példában szereplő deklarációval bármilyen űrlapot hozzárendelhet az alkalmazáshoz anyForm
. Bár anyForm
az osztály Formminden tagját elérheti, nem használhatja az adott űrlapokhoz definiált további metódusokat vagy tulajdonságokat, például specialForm
.
Az alaposztály minden tagja elérhető a származtatott osztályok számára, de a származtatott osztály további tagjai nem érhetők el az alaposztály számára.