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


Objektumok és osztályok a Visual Basicben

Az objektum a kód és az adatok együttese, amely egységként kezelhető. Az objektumok lehetnek egy alkalmazás részei, például vezérlők vagy űrlapok. Egy teljes alkalmazás is lehet objektum.

Amikor létrehoz egy alkalmazást a Visual Basicben, 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 számukra. 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.

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

Objektumok és osztályok

A Visual Basic minden objektumát egy osztály definiálja. 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 hozhat létre.

Az objektum és az osztály közötti kapcsolat megértéséhez gondoljon a sütikiszúrókra és a sütikre. 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 definiálja saját osztályát. Például:

    Public Class Customer
        Public Property AccountNumber As Integer
    End Class
    
  2. Hozzon létre egy dim utasítást egy olyan változó létrehozásához, amelyhez osztálypéldányt rendelhet hozzá. 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 az objektumváltozón keresztül is elérheti az osztály tagjait.

    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 fordításkor nem ismeri az osztálytípust, késői kötést hívhat meg úgy, hogy a változót objektumadat-típusnak deklarálja. A késői kötés azonban lassí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 eset

Az osztályból újonnan létrehozott objektumok gyakran azonosak egymással. Ha önálló 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, minden jelölőnégyzetobjektum az CheckBox osztály egy példánya. Az egyes CheckBox objektumok az osztály által meghatározott jellemzők és képességek (tulajdonságok, változók, eljárások és események) közös készletével rendelkeznek. Azonban mindegyiknek saját neve van, külön engedélyezhető és letiltható, és más helyre helyezhető az űrlapon.

Objektum tagjai

Az objektum egy alkalmazás eleme, amely egy osztály egy példányát jelöli. 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 Text objektum tulajdonságát állítja beLabel.

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 egy pontot (.) ír be taghozzáférési operátorként. Ha egy adott osztálypéldányké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. A hozzárendelési utasításokkal ugyanúgy lekérheti és beállíthatja az értékeket, mint a helyi változókat egy eljárásban. Az alábbi példa lekéri a Width tulajdonságot, é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.

A következő esetekben használjon tulajdonságeljárásokat:

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

  • A tulajdonság egy jól definiált é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ókban vagy más tulajdonságok értékeiben is változásokat okoz.

  • A tulajdonság beállítása vagy lekérése előtt el kell végezni egy lépéskészletet.

Használjon mezőket, ha:

  • Az érték önvalidáló típusú. Például akkor fordul elő hiba vagy automatikus adatkonvertálás, ha egy True vagy False-től eltérő értéket rendelünk egy Boolean változóhoz.

  • Az adattípus által támogatott tartomány bármely értéke érvényes. Ez számos típus Single - vagy Doubletulajdonságra igaz.

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

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

Jótanács

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

Módszerek

A metódus olyan művelet, amelyet egy objektum végrehajthat. Például a Add objektum ComboBox metódusa, amely új bejegyzést ad hozzá egy kombinált listához.

Az alábbi példa bemutatja a Start metódust egy Timer objektumban.

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

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

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

Események

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

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 adott osztály egy példánya. A tagok, amelyeket nem deklaráltak a megosztott kulcsszóval, példánytagok, amelyek csak az adott példányhoz tartoznak. Az egyik példány tagja független ugyanazon osztály másik példányának ugyanattól a tagjától. Egy példánytag változó például különböző értékekkel rendelkezhet különböző példányokban.

A kulcsszóval Shared deklarált tagok megosztott tagok, amelyek az osztály egészéhez tartoznak, és nem 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 az osztályhoz hozzáférő összes kód számára elérhető.

Nem megosztott tagok elérése

  1. Győződjön meg arról, hogy az objektum az osztályából lett létrehozva, é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 tagelérési operátorral (.), majd a tag nevével.

    secondForm.Show()
    

Hozzáférés megosztott tagokhoz

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

    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 Shared taghoz.

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 objektumként hozhatók létre, míg a standard modulok nem. Mivel egy standard modul adatainak csak egy példánya van, amikor a program egyik része egy nyilvános változót módosít egy standard modulban, a program bármely másik 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 és önállóan léteznek. Egy másik különbség az, hogy a standard modulokkal ellentétben 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 még mindig eltér egy 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, ahogy a modultagok is elérhetők.

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 meghatározva, és csak az objektum teljes élettartama alatt léteznek. Az osztálytagok osztályon kívüli eléréséhez teljesen minősített neveket kell használnia objektumformátumban. Tag.

Másrészt 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 a változókat és eljárásokat egyszer deklarálja, 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ési funkciók biztosításához. Ha osztályként hozza létre a helyesírás-ellenőrzőt, a lefordított állományra mutató hivatkozás hozzáadásával újból felhasználhatja azt más alkalmazásokban. Még jobb, hogy megtakaríthat magának némi munkát egy valaki más által már kifejlesztett helyesírás-ellenőrző osztály segítségével.

A .NET számos példát kínál a használatra elérhető összetevőkre. Az alábbi példa a TimeZone osztályt a System névtérben használja. TimeZone 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öbb módon is kapcsolódhatnak egymáshoz. Az elsődleges kapcsolattípusok hierarchikusak és elszigetelések.

Hierarchikus kapcsolat

Ha az osztályok alaposabb osztályokból származnak, azt mondják, hogy hierarchikus kapcsolatuk van. Az osztályhierarchiák akkor hasznosak, ha egy általánosabb osztály altípusát tartalmazó elemeket írnak le.

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

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

  1. Osztálykimutatás használatával 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 létrehoz egy End Class, amikor megad egy Class utasítást.

  2. Kövesse az Class utasítást azonnal egy Öröklési nyilatkozattal. 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 közzétett 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 alapjának megfelelő 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 összeállí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 megadja a nevét, vagy azonosítja a névterét egy Imports utasításban (.NET névtér és típus). Ha az osztály egy másik projektben található, előfordulhat, hogy hozzá kell adnia egy hivatkozást az adott projekthez. További információt a projektek hivatkozásainak kezelése című témakörben talál.

Elszigetelési kapcsolat

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 egyik konkrét objektumtartalom-típust a gyűjtemények képviselik. A gyűjtemények hasonló objektumokból álló csoportok, amelyek számba vehetők. A Visual Basic támogat egy specifikus szintaxist a For Each...Next utasításban, amely lehetővé teszi a gyűjtemény elemeinek bejárását. Emellett a gyűjtemények gyakran lehetővé teszik, hogy Item[] az elemeket az indexük alapján vagy egy egyedi karakterlánccal társítva lekérje. A gyűjtemények egyszerűbben használhatók, mint a tömbök, mivel lehetővé teszik 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 módszereket és tulajdonságokat, a MyClass-t és a MyBase-t.

Objektum élettartama: Objektumok létrehozása és megsemmisítése
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ói: Névvel ellátott és névtelen típusok
Az objektum inicializálóit tárgyalja, amelyek egy adott kifejezés használatával névvel ellátott és névtelen típusú példányok 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 névtelen típusdeklarációkban. Példák a sikeres és sikertelen következtetésre.