Megosztás a következőn keresztül:


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 Frienda 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 :

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Tegyük fel, hogy az alkalmazás definiál egy, specialFormaz osztálytól Formöröklő űrlaposztályt. Deklarálhat egy objektumváltozót, amely kifejezetten erre specialFormhivatkozik, 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 specialFormobjektumaira korlátozza a változótnextForm, de az összes metódust és tulajdonságot specialForm is elérhetővé nextFormteszi, 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.

Lásd még