Objektumorientált programozás (Visual Basic)
A Visual Basic teljes körű támogatást nyújt az objektumorientált programozáshoz, beleértve a beágyazást, az öröklést és a polimorfizmust.
A beágyazás azt jelenti, hogy a kapcsolódó tulajdonságok, metódusok és más tagok egy csoportja egyetlen egységként vagy objektumként lesz kezelve.
Az öröklés azt ismerteti, hogy egy meglévő osztály alapján hogyan hozhatók létre új osztályok.
A polimorfizmus azt jelenti, hogy több osztály is lehet, amelyek felcserélhetők, annak ellenére, hogy minden osztály ugyanazokat a tulajdonságokat vagy metódusokat implementálja különböző módokon.
Ez a szakasz a következő fogalmakat ismerteti:
Osztályok és objektumok
Az osztály és az objektum kifejezéseket néha felcserélhetően használják, de valójában az osztályok az objektumok típusát írják le, míg az objektumok az osztályok használható példányai. Az objektum létrehozásának műveletét tehát példányosításnak nevezzük. A terv analógiával az osztály egy terv, az objektum pedig az adott tervből készült épület.
Osztály definiálása:
Class SampleClass
End Class
A Visual Basic az osztályok egyszerűsített, struktúráknak nevezett verzióját is biztosítja, amelyek akkor hasznosak, ha nagy méretű objektumokból álló tömböt kell létrehoznia, és ehhez nem szeretne túl sok memóriát használni.
Struktúra definiálása:
Structure SampleStructure
End Structure
További információk:
Osztálytagok
Minden osztály különböző osztálytagokkal rendelkezhet, amelyek osztályadatokat leíró tulajdonságokat, az osztály viselkedését meghatározó metódusokat és a különböző osztályok és objektumok közötti kommunikációt biztosító eseményeket tartalmaznak.
Tulajdonságok és mezők
A mezők és tulajdonságok az objektumok által tartalmazott információkat jelölik. A mezők olyanok, mint a változók, mert közvetlenül olvashatók vagy beállíthatók.
Mező definiálása:
Class SampleClass
Public SampleField As String
End Class
A tulajdonságok rendelkeznek a beolvasási és beállítási eljárásokkal, amelyek nagyobb mértékben befolyásolják az értékek beállítását vagy visszaadási módját.
A Visual Basic lehetővé teszi, hogy hozzon létre egy privát mezőt a tulajdonságérték tárolására, vagy használjon úgynevezett automatikusan implementált tulajdonságokat, amelyek automatikusan létrehozzák ezt a mezőt a színfalak mögött, és biztosítják a tulajdonságeljárások alapvető logikáját.
Automatikusan implementált tulajdonság definiálása:
Class SampleClass
Public Property SampleProperty as String
End Class
Ha további műveleteket kell végrehajtania a tulajdonságérték olvasásához és írásához, adjon meg egy mezőt a tulajdonság értékének tárolására, és adja meg a tárolási és lekérési alaplogikát:
Class SampleClass
Private m_Sample As String
Public Property Sample() As String
Get
' Return the value stored in the field.
Return m_Sample
End Get
Set(ByVal Value As String)
' Store the value in the field.
m_Sample = Value
End Set
End Property
End Class
A legtöbb tulajdonság rendelkezik a tulajdonság értékének beállítására és lekérésére használható metódusokkal vagy eljárásokkal. Írásvédett vagy írásvédett tulajdonságokat azonban létrehozhat, hogy korlátozza őket a módosításuktól vagy olvasásuktól. A Visual Basicben használhatja és WriteOnly
kulcsszavakat is használhatReadOnly
. Az automatikusan implementált tulajdonságok azonban nem lehetnek írásvédettek és írásvédettek.
További információk:
Metódusok
A metódus olyan művelet, amelyet egy objektum végrehajthat.
Feljegyzés
A Visual Basicben kétféleképpen hozhat létre metódust: az Sub
utasítást akkor használja a rendszer, ha a metódus nem ad vissza értéket; az Function
utasítást akkor használja a rendszer, ha egy metódus értéket ad vissza.
Osztály metódusának definiálása:
Class SampleClass
Public Function SampleFunc(ByVal SampleParam As String)
' Add code here
End Function
End Class
Egy osztály több implementációval vagy túlterheléssel is rendelkezhet ugyanahhoz a módszerhez, amely különbözik a paraméterek vagy paramétertípusok számától.
Metódus túlterhelése:
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
A legtöbb esetben osztálydefiníción belül deklarál egy metódust. A Visual Basic azonban olyan bővítménymetelyeket is támogat, amelyek lehetővé teszik metódusok hozzáadását egy meglévő osztályhoz az osztály tényleges definíciója mellett.
További információk:
Konstruktorok
A konstruktorok olyan osztálymetódusok, amelyek automatikusan végrehajtásra kerülnek egy adott típusú objektum létrehozásakor. A konstruktorok általában inicializálják az új objektum adattagjainak inicializálását. A konstruktorok csak egyszer futtathatók egy osztály létrehozásakor. Ezenkívül a konstruktorban lévő kód mindig az osztály bármely más kódja előtt fut. A konstruktorok túlterhelése azonban ugyanúgy hozható létre, mint bármely más módszer esetében.
Konstruktor definiálása egy osztályhoz:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
További információ: Objektum élettartama: Objektumok létrehozása és megsemmisítése.
Destruktorok
A destruktorok osztálypéldányok lebontására szolgálnak. A .NET-keretrendszer a szemétgyűjtő automatikusan kezeli az alkalmazás felügyelt objektumainak memóriafoglalását és felszabadítását. Előfordulhat azonban, hogy az alkalmazás által létrehozott nem felügyelt erőforrások törléséhez még szükség lehet a destruktorok használatára. Egy osztályhoz csak egy destruktor lehet.
A .NET-keretrendszer destruktorairól és szemétgyűjtéséről további információt a Szemétgyűjtés című témakörben talál.
esemény
Az események lehetővé teszik, hogy egy osztály vagy objektum értesítse a többi osztályt vagy objektumot, ha valamilyen érdekes esemény történik. Az eseményt küldő (vagy emelő) osztály neve közzétevő, az eseményt fogadó (vagy kezelő) osztályok pedig előfizetők. Az eseményekről, azok létrehozásának és kezelésének módjáról további információt az Események című témakörben talál.
Események létrehozásához használja a RaiseEvent utasítást.
Az eseménykezelők deklaratív módon történő megadásához használja a WithEvents utasítást és a Handles záradékot .
Az eseményhez társított eseménykezelő dinamikus hozzáadásához, eltávolításához és módosításához használja az AddHandler utasítást és a RemoveHandler utasítást a AddressOf operátorral együtt.
Beágyazott osztályok
Egy másik osztályban definiált osztályt beágyazottnak nevezünk. Alapértelmezés szerint a beágyazott osztály privát.
Class Container
Class Nested
' Add code here.
End Class
End Class
A beágyazott osztály egy példányának létrehozásához használja a tárolóosztály nevét, majd a pont, majd a beágyazott osztály nevét:
Dim nestedInstance As Container.Nested = New Container.Nested()
Hozzáférési módosítók és hozzáférési szintek
Minden osztály és osztálytag hozzáférési módosítók használatával megadhatja, hogy milyen hozzáférési szintet biztosít a többi osztálynak.
A következő hozzáférési módosítók érhetők el:
Visual Basic Modifier | Definíció |
---|---|
Nyilvános | A típust vagy tagot bármely más kód érheti el ugyanabban a szerelvényben vagy egy másik szerelvényben, amely hivatkozik rá. |
Privát | A típus vagy tag csak kóddal érhető el ugyanabban az osztályban. |
Védett | A típus vagy tag csak kóddal érhető el ugyanabban az osztályban vagy származtatott osztályban. |
Barát | A típust vagy tagot bármely kód elérheti ugyanabban a szerelvényben, egy másik szerelvényből azonban nem. |
Protected Friend |
A típust vagy tagot az ugyanabban a szerelvényben lévő bármely kód, vagy egy másik szerelvény származtatott osztálya érheti el. |
További információ: Hozzáférési szintek a Visual Basicben.
Osztályok példányosítása
Objektum létrehozásához létre kell hoznia egy osztályt, vagy létre kell hoznia egy osztálypéldányt.
Dim sampleObject as New SampleClass()
Az osztály példányosítása után értékeket rendelhet a példány tulajdonságaihoz és mezőihez, és meghívhatja az osztály metódusokat.
' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
Ha értékeket szeretne hozzárendelni a tulajdonságokhoz az osztály példányosítási folyamata során, használja az objektum inicializálóit:
Dim sampleObject = New SampleClass With
{.FirstProperty = "A", .SecondProperty = "B"}
További információk:
Megosztott osztályok és tagok
Az osztály megosztott tagja az osztály összes példánya által megosztott tulajdonság, eljárás vagy mező.
Megosztott tag definiálása:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
A megosztott tag eléréséhez használja az osztály nevét az osztály objektumának létrehozása nélkül:
MsgBox(SampleClass.SampleString)
A Visual Basic megosztott moduljai csak megosztott tagokkal rendelkeznek, és nem hozhatók létre példányosítva. A megosztott tagok nem férhetnek hozzá a nem megosztott tulajdonságokhoz, mezőkhöz és metódusokhoz
További információk:
Névtelen típusok
A névtelen típusok lehetővé teszik objektumok létrehozását anélkül, hogy osztálydefiníciót írnál az adattípushoz. Ehelyett a fordító létrehoz egy osztályt. Az osztály nem rendelkezik használható névvel, és tartalmazza az objektum deklarálásában megadott tulajdonságokat.
Névtelen típusú példány létrehozása:
' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
New With {Key .FirstProperty = "A", .SecondProperty = "B"}
További információ: Névtelen típusok.
Öröklődés
Az öröklés lehetővé teszi egy új osztály létrehozását, amely újra felhasználja, kibővíti és módosítja a másik osztályban definiált viselkedést. Az az osztály, amelynek tagjai öröklődnek, alaposztálynak, a tagokat öröklő osztályt pedig származtatott osztálynak nevezzük. A Visual Basic összes osztálya azonban implicit módon örökli a Object .NET-osztályhierarchiát támogató osztályt, és minden osztály számára alacsony szintű szolgáltatásokat biztosít.
Feljegyzés
A Visual Basic nem támogatja a többszörös öröklést. Ez azt is jelentheti, hogy egy származtatott osztályhoz csak egy alaposztály adható meg.
Örökölni egy alaposztályból:
Class DerivedClass
Inherits BaseClass
End Class
Alapértelmezés szerint minden osztály örökölhető. Megadhatja azonban, hogy egy osztály nem használható-e alaposztályként, vagy létrehozhat egy olyan osztályt, amely csak alaposztályként használható.
Annak megadása, hogy egy osztály nem használható alaposztályként:
NotInheritable Class SampleClass
End Class
Annak megadása, hogy egy osztály csak alaposztályként használható, és nem hozható létre:
MustInherit Class BaseClass
End Class
További információk:
Tagok felülírása
Alapértelmezés szerint egy származtatott osztály örökli az összes tagot az alaposztályától. Ha módosítani szeretné az örökölt tag viselkedését, felül kell bírálnia. Ez azt is jelentheti, hogy a metódus, tulajdonság vagy esemény új implementációját definiálhatja a származtatott osztályban.
A tulajdonságok és metódusok felülírási módjának szabályozásához a következő módosítókat használjuk:
Visual Basic Modifier | Definíció |
---|---|
Felülírható | Lehetővé teszi, hogy egy osztálytag felül legyen bírálva egy származtatott osztályban. |
Felülbírálja | Felülbírálja az alaposztályban definiált virtuális (felülbírálható) tagot. |
NotOverridable | Megakadályozza, hogy egy tag felül legyen bírálva egy öröklő osztályban. |
MustOverride | Az osztálytagot felül kell bírálni a származtatott osztályban. |
Árnyékok | Egy alaposztályból örökölt tag elrejtése |
Interfészek
A felületek, például az osztályok, tulajdonságok, metódusok és események készletét határozzák meg. Az osztályoktól eltérően azonban a felületek nem biztosítják a megvalósítást. Ezeket osztályok implementálják, és az osztályoktól különálló entitásként definiálják őket. Az interfész egy szerződést jelent, amelyben az interfészt megvalósító osztálynak pontosan a definiált módon kell implementálnia az interfész minden aspektusát.
Interfész definiálása:
Public Interface ISampleInterface
Sub DoSomething()
End Interface
Felület implementálása egy osztályban:
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
További információk:
Generikus
A .NET osztályai, struktúrái, felületei és metódusai olyan típusparamétereket tartalmazhatnak, amelyek meghatároznak olyan típusú objektumokat, amelyeket tárolhatnak vagy használhatnak. Az általános adatok leggyakoribb példája egy gyűjtemény, ahol megadhatja a gyűjteményben tárolandó objektumok típusát.
Általános osztály definiálása:
Class SampleGeneric(Of T)
Public Field As T
End Class
Általános osztály egy példányának létrehozása:
Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
További információk:
Delegáltak
A meghatalmazott egy metódus-aláírást definiáló típus, amely bármely kompatibilis aláírással rendelkező metódusra hivatkozhat. A metódust meghívhatja (vagy meghívhatja) a meghatalmazotton keresztül. A meghatalmazottak metódusokat adnak át argumentumként más metódusoknak.
Feljegyzés
Az eseménykezelők nem más, mint a meghatalmazottak által meghívott metódusok. További információ a meghatalmazottak eseménykezelésben való használatáról: Események.
Meghatalmazott létrehozása:
Delegate Sub SampleDelegate(ByVal str As String)
A meghatalmazott által megadott aláírásnak megfelelő metódusra mutató hivatkozás létrehozása:
Class SampleClass
' Method that matches the SampleDelegate signature.
Sub SampleSub(ByVal str As String)
' Add code here.
End Sub
' Method that instantiates the delegate.
Sub SampleDelegateSub()
Dim sd As SampleDelegate = AddressOf SampleSub
sd("Sample string")
End Sub
End Class
További információk: