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


Objektumok és osztályok a Visual Basic

Az objektum kód- és adatkombináció, amely egységként kezelhető. Az objektumok lehetnek egy alkalmazás részei, például vezérlők vagy űrlapok. A teljes alkalmazás objektum is lehet.

Amikor létrehoz egy alkalmazást Visual Basic, folyamatosan objektumokkal dolgozik. Használhatja a Visual Basic által biztosított objektumokat, például vezérlőket, űrlapokat és adatelérési objektumokat. A Visual Basic alkalmazásban más alkalmazásokból származó objektumokat is használhat. Akár saját objektumokat is létrehozhat, és további tulajdonságokat és metódusokat határozhat meg hozzájuk. Az objektumok úgy működnek, mint a programok előre elkészített építőelemei – lehetővé teszik, hogy egyszer megírjon egy kódot, és újra és újra felhasználja azt.

Ez a témakör részletesen ismerteti az objektumokat.

Objektumok és osztályok

A Visual Basic minden objektumát egy osztály határozza meg. Az osztály egy objektum változóit, tulajdonságait, eljárásait és eseményeit írja le. Az objektumok osztálypéldányok; az osztály definiálása után tetszőleges számú objektumot létrehozhat.

Az objektum és osztálya közötti kapcsolat megértéséhez gondoljon a cookie-kra és a cookie-kra. A cookie-vágó az osztály. Meghatározza az egyes cookie-k jellemzőit, például a méretet és az alakzatot. Az osztály objektumokat hoz létre. A tárgyak a cookie-k.

A tagok elérése előtt létre kell hoznia egy objektumot, kivéve Shared azokat a tagokat, amelyek az osztály objektuma nélkül is elérhetők.

Objektum létrehozása osztályból

  1. Határozza meg, hogy melyik osztályból szeretne objektumot létrehozni, vagy határozza meg a saját osztályát. Például:

    Public Class Customer
        Public Property AccountNumber As Integer
    End Class
    
  2. Dim utasítás írása egy olyan változó létrehozásához, amelyhez hozzárendelhet egy osztálypéldányt. A változónak a kívánt osztály típusának kell lennie.

    Dim nextCustomer As Customer
    
  3. Adja hozzá az Új operátor kulcsszót a változó inicializálásához az osztály új példányához.

    Dim nextCustomer As New Customer
    
  4. Most már elérheti az osztály tagjait az objektumváltozón keresztül.

    nextCustomer.AccountNumber = lastAccountNumber + 1
    

Megjegyzés

Amikor csak lehetséges, deklarálnia kell a változót a hozzárendelni kívánt osztálytípusnak. Ezt korai kötésnek nevezzük. Ha a fordításkor nem ismeri az osztály típusát, késői kötést hívhat meg, ha a változót objektum adattípusúnak deklarálja. A késői kötés azonban lelassíthatja a teljesítményt, és korlátozhatja a futásidejű objektum tagjaihoz való hozzáférést. További információ: Objektumváltozó-deklaráció.

Több példány

Az osztályból újonnan létrehozott objektumok gyakran azonosak egymással. Ha azonban egyéni objektumként léteznek, a változóik és tulajdonságaik a többi példánytól függetlenül módosíthatók. Ha például három jelölőnégyzetet ad hozzá egy űrlaphoz, mindegyik jelölőnégyzetobjektum az CheckBox osztály egy példánya. Az egyes CheckBox objektumok közös jellemzőkkel és képességekkel (tulajdonságok, változók, eljárások és események) rendelkeznek, amelyeket az osztály határoz meg. Azonban mindegyiknek saját neve van, külön engedélyezhető és letiltható, és az űrlap másik helyére helyezhető.

Objektumtagok

Az objektum egy alkalmazás egy eleme, amely egy osztály egy példányát képviseli. A mezők, tulajdonságok, metódusok és események az objektumok építőelemei, és tagjaikat alkotják.

Taghozzáférés

Az objektum egy tagját úgy érheti el, hogy sorrendben megadja az objektumváltozó nevét, egy pontot (.) és a tag nevét. Az alábbi példa egy Label objektum tulajdonságát állítja beText.

warningLabel.Text = "Data not saved"

IntelliSense tagok listája

Az IntelliSense egy osztály tagjait listázza, amikor meghívja a Listatagok lehetőséget, például amikor beír egy pontot (.) taghozzáférési operátorként. Ha az adott osztály példányaként deklarált változó nevét követő időszakot írja be, az IntelliSense felsorolja az összes példánytagot, és egyik megosztott tagot sem. Ha magát az osztálynevet követő időszakot írja be, az IntelliSense felsorolja az összes megosztott tagot, és egyik példánytagot sem. További információ: Az IntelliSense használata.

Mezők és tulajdonságok

A mezők és tulajdonságok egy objektumban tárolt információkat jelölnek. Az értékeket a hozzárendelési utasításokkal ugyanúgy kérdezheti le és állíthatja be, mint a helyi változókat egy eljárásban. Az alábbi példa lekéri a tulajdonságot Width , és beállítja egy ForeColorLabel objektum tulajdonságát.

Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red

Vegye figyelembe, hogy a mezőket tagváltozónak is nevezik.

Használjon tulajdonságeljárásokat a következő esetekben:

  • Szabályoznia kell, hogy mikor és hogyan legyen beállítva vagy lekérve egy érték.

  • A tulajdonság egy jól meghatározott értékkészlettel rendelkezik, amelyet ellenőrizni kell.

  • Az érték beállítása érzékelhető változást okoz az objektum állapotában, például egy IsVisible tulajdonságban.

  • A tulajdonság beállítása más belső változók vagy más tulajdonságok értékeinek megváltozását eredményezi.

  • A tulajdonság beállítása vagy lekérése előtt lépéseket kell végrehajtani.

Mezők használata a következő esetekben:

  • Az érték önértékelési típusú. Hiba vagy automatikus adatkonvertálás például akkor fordul elő, ha egy változótól True eltérő vagy False ahhoz Boolean rendelt érték van hozzárendelve.

  • Az adattípus által támogatott tartomány bármely értéke érvényes. Ez a típus Single vagy Doublea .

  • A tulajdonság egy String adattípus, és nincs korlátozás a sztring méretére vagy értékére.

  • További információ: Tulajdonságeljárások.

Tipp

A nem állandó mezőket mindig tartsa magánjellegűnek. Ha nyilvánossá szeretné tenni, használjon inkább egy tulajdonságot.

Metódusok

A metódus egy objektum által végrehajtható művelet. Például az objektum egy metódusaComboBox, Add amely új bejegyzést ad hozzá egy kombinált listához.

Az alábbi példa egy StartTimer objektum metódusát mutatja be.

Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()

Vegye figyelembe, hogy a metódus egyszerűen egy objektum által közzétett eljárás .

További információ: Eljárások.

esemény

Az esemény egy objektum által felismert művelet, például az egérre való kattintás vagy egy kulcs lenyomása, amelyre kódot írhat a válaszhoz. Az események egy felhasználói művelet vagy programkód eredményeként következhetnek be, vagy a rendszer okozhatja őket. Az eseményt jelző kódot a rendszer az esemény felemelésére , az arra reagáló kódot pedig a rendszer kezeli .

Saját egyéni eseményeket is létrehozhat, amelyeket az objektumok létrehoznak és más objektumok kezelnek. További információ: Események.

Példánytagok és megosztott tagok

Amikor objektumot hoz létre egy osztályból, az eredmény az osztály egy példánya lesz. A megosztott kulcsszóval nem deklarált tagok példánytagok, amelyek szigorúan az adott példányhoz tartoznak. Az egyik példány egy tagja független ugyanannak a tagnak az osztály egy másik példányától. A példánytag változók például különböző értékekkel rendelkezhetnek különböző példányokban.

A kulcsszóval Shared deklarált tagok megosztott tagok, amelyek az osztály egészéhez tartoznak, nem pedig egy adott példányhoz. A megosztott tag csak egyszer létezik, függetlenül attól, hogy hány példányt hoz létre annak osztályából, vagy ha nem hoz létre példányokat. Egy megosztott tagváltozó például csak egy értékkel rendelkezik, amely minden olyan kód számára elérhető, amely hozzáfér az osztályhoz.

Nem megosztott tagok elérése

  1. Győződjön meg arról, hogy az objektum létre lett hozva az osztályból, és hozzá lett rendelve egy objektumváltozóhoz.

    Dim secondForm As New System.Windows.Forms.Form
    
  2. A tagot elérő utasításban kövesse az objektumváltozó nevét a taghozzáférési operátorral (.), majd a tag nevével.

    secondForm.Show()
    

Megosztott tagok elérése

  • Kövesse az osztály nevét a taghozzáférési operátorral (.), majd a tag nevével. Mindig közvetlenül az osztálynéven keresztül kell elérnie az objektum egy Shared tagját.

    Console.WriteLine("This computer is called " & Environment.MachineName)
    
  • Ha már létrehozott egy objektumot az osztályból, az objektum változóján keresztül is hozzáférhet egy taghoz Shared .

Osztályok és modulok közötti különbségek

Az osztályok és modulok közötti fő különbség az, hogy az osztályok példányosíthatók objektumként, míg a standard modulok nem. Mivel a standard modul adatainak csak egy példánya van, amikor a program egyik része módosít egy nyilvános változót egy standard modulban, a program bármely más része ugyanazt az értéket kapja, ha beolvassa ezt a változót. Ezzel szemben az objektumadatok minden példányosított objektumhoz külön-külön léteznek. Egy másik különbség, hogy a standard moduloktól eltérően az osztályok interfészeket implementálhatnak. Ha egy osztály a MustInherit módosítóval van megjelölve, az nem hozható létre közvetlenül. Ez azonban továbbra is eltér a modultól, mivel örökölhető, míg a modulok nem örökölhetők.

Megjegyzés

Ha a Shared módosító egy osztálytagra van alkalmazva, az az osztály egy adott példánya helyett magához az osztályhoz van társítva. A tag közvetlenül az osztálynév használatával érhető el, ugyanúgy, mint a modultagok.

Az osztályok és modulok különböző hatóköröket is használnak tagjaik számára. Az osztályon belül definiált tagok hatóköre az osztály egy adott példányán belül van, és csak az objektum élettartama alatt léteznek. Ahhoz, hogy az osztálytagok egy osztályon kívülről is elérhetők legyenek, teljesen minősített neveket kell használnia objektumformátumban. Tag.

Másfelől a modulban deklarált tagok alapértelmezés szerint nyilvánosan elérhetők, és bármely olyan kóddal elérhetők, amely hozzáfér a modulhoz. Ez azt jelenti, hogy a standard modul változói gyakorlatilag globális változók, mivel a projekt bármely pontjáról láthatók, és a program életében léteznek.

Osztályok és objektumok újrafelhasználása

Az objektumok lehetővé teszik, hogy egyszer deklarálja a változókat és az eljárásokat, majd szükség esetén újra felhasználja őket. Ha például helyesírás-ellenőrzőt szeretne hozzáadni egy alkalmazáshoz, definiálhatja az összes változót és támogatási függvényt a helyesírás-ellenőrző funkció biztosításához. Ha osztályként hozza létre a helyesírás-ellenőrzőt, újra felhasználhatja más alkalmazásokban, ha hozzáad egy hivatkozást a lefordított szerelvényhez. Még jobb, ha egy másik személy által már kifejlesztett helyesírás-ellenőrző osztály használatával menthet magának némi munkát.

A .NET számos példát kínál a használatra elérhető összetevőkre. Az alábbi példa a TimeZone névtérben lévő osztályt System használja. TimeZone A olyan tagokat biztosít, amelyek lehetővé teszik az aktuális számítógéprendszer időzónájára vonatkozó információk lekérését.

Public Sub ExamineTimeZone()
    Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
    Dim s As String = "Current time zone is "
    s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
    s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
    s &= "different from UTC (coordinated universal time)"
    s &= vbCrLf & "and is currently "
    If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
    s &= "on ""summer time""."
    Console.WriteLine(s)
End Sub

Az előző példában az első Dim Utasítás deklarál egy típusú TimeZone objektumváltozót, és hozzárendel hozzá egy TimeZone , a CurrentTimeZone tulajdonság által visszaadott objektumot.

Objektumok közötti kapcsolatok

Az objektumok többféleképpen is összekapcsolhatók egymással. A kapcsolatok fő típusai hierarchikusak és elszigetelések.

Hierarchikus kapcsolat

Ha az osztályok alaposabb osztályokból származnak, a rendszer hierarchikus kapcsolatot tart fenn. Az osztályhierarchiák akkor hasznosak, ha egy általánosabb osztály altípusát tartalmazó elemeket írnak le.

A következő példában tegyük fel, hogy egy olyan speciális típust Button szeretne definiálni, amely normálisnak Button tűnik, de olyan metódust is elérhetővé tesz, amely megfordítja az előtér- és háttérszíneket.

Már meglévő osztályból származtatott osztály definiálása

  1. Osztályutasítással definiálhat egy osztályt, amelyből létre szeretné hozni a szükséges objektumot.

    Public Class ReversibleButton
    

    Győződjön meg arról, hogy egy End Class utasítás az osztály utolsó kódsorát követi. Alapértelmezés szerint az integrált fejlesztési környezet (IDE) automatikusan generál egy End Class utasítás beírásakor Class .

  2. Kövesse az Class utasítást azonnal egy Inherits utasítással. Adja meg azt az osztályt, amelyből az új osztály származik.

    Inherits System.Windows.Forms.Button
    

    Az új osztály örökli az alaposztály által meghatározott összes tagot.

  3. Adja hozzá a származtatott osztály által elérhetővé tesz további tagok kódját. Hozzáadhat például egy metódust ReverseColors , és a származtatott osztály a következőképpen nézhet ki:

    Public Class ReversibleButton
        Inherits System.Windows.Forms.Button
            Public Sub ReverseColors()
                Dim saveColor As System.Drawing.Color = Me.BackColor
                Me.BackColor = Me.ForeColor
                Me.ForeColor = saveColor
           End Sub
    End Class
    

    Ha létrehoz egy objektumot az ReversibleButton osztályból, az az osztály összes tagját Button , valamint a ReverseColors metódust és a benne definiált ReversibleButtonúj tagokat is elérheti.

A származtatott osztályok az általuk alapult osztályból öröklik a tagokat, így összetettebbé teheti az osztályhierarchiában való előrehaladást. További információ: Öröklés alapjai.

A kód fordítása

Győződjön meg arról, hogy a fordító hozzáfér ahhoz az osztályhoz, amelyből az új osztályt le szeretné származtatni. Ez azt jelentheti, hogy az előző példához hasonlóan teljes mértékben megfelelteti a nevét, vagy egy importutasításban (.NET-névtér és típus) azonosítja a névterét. Ha az osztály egy másik projektben van, előfordulhat, hogy hozzá kell adnia egy hivatkozást az adott projekthez. További információ: Projektek referenciáinak kezelése.

Befoglaltsági viszony

Az objektumok összekapcsolásának másik módja egy elszigetelési kapcsolat. A tárolóobjektumok logikailag beágyaznak más objektumokat. Az objektum például OperatingSystem logikailag tartalmaz egy Version objektumot, amelyet a tulajdonságán Version keresztül ad vissza. Vegye figyelembe, hogy a tárolóobjektum fizikailag nem tartalmaz más objektumot.

Gyűjtemények

Az objektumok egy adott típusú elszigetelését gyűjtemények jelölik. A gyűjtemények hasonló objektumokból álló csoportok, amelyek számba vehetők. Visual Basic támogatja a For Each szintaxis egy adott szintaxisát... Következő utasítás, amely lehetővé teszi a gyűjtemény elemeinek iterálását. Emellett a gyűjtemények gyakran lehetővé teszik, hogy Item[] az elemeket az indexük alapján vagy egy egyedi sztringgel társítva kérje le. A gyűjtemények egyszerűbben használhatók, mint a tömbök, mivel lehetővé teszik az elemek hozzáadását vagy eltávolítását indexek használata nélkül. Könnyű használatuk miatt a gyűjteményeket gyakran használják űrlapok és vezérlők tárolására.

Útmutató: Osztályok definiálása
Részletes leírást nyújt az osztály létrehozásának módjáról.

Túlterhelt tulajdonságok és metódusok
Túlterhelt tulajdonságok és metódusok

Öröklés alapjai
Ismerteti az öröklésmódosítókat, a felülírási metódusokat és tulajdonságokat, a MyClass és a MyBase elemet.

Objektum élettartama: Objektumok létrehozása és megsemmisítés
Az osztálypéldányok létrehozását és eltávolítását ismerteti.

Névtelen típusok
Leírja, hogyan hozhat létre és használhat névtelen típusokat, amelyek lehetővé teszik objektumok létrehozását anélkül, hogy osztálydefiníciót írnál az adattípushoz.

Objektum-inicializálók: Névvel ellátott és névtelen típusok
Az objektum-inicializálókat tárgyalja, amelyek névvel ellátott és névtelen típusú példányok egyetlen kifejezés használatával történő létrehozására szolgálnak.

Útmutató: Tulajdonságnevek és -típusok következtetése névtelen típusdeklarációkban
Ismerteti, hogyan következtethet a tulajdonságnevekre és -típusokra a névtelen típusú deklarációkban. Példák a sikeres és sikertelen következtetésre.