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.
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
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 ClassHozzon 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 CustomerAdja 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 CustomerMost 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
IsVisibletulajdonsá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
TruevagyFalse-től eltérő értéket rendelünk egyBooleanváltozóhoz.Az adattípus által támogatott tartomány bármely értéke érvényes. Ez számos típus
Single- vagyDoubletulajdonsá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
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.FormA 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 egySharedtagjá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
Sharedtaghoz.
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
Osztálykimutatás használatával definiálhat egy osztályt, amelyből létre szeretné hozni a szükséges objektumot.
Public Class ReversibleButtonGyőződjön meg arról, hogy egy
End Classutasí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 egyEnd Class, amikor megad egyClassutasítást.Kövesse az
Classutasí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.ButtonAz új osztály örökli az alaposztály által meghatározott összes tagot.
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 ClassHa létrehoz egy objektumot az
ReversibleButtonosztályból, az az osztály összes tagját Button , valamint aReverseColorsmetódust és a benne definiáltReversibleButtonú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.
Kapcsolódó témakörök
Ú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.