Lathund - Klassmoduler
Förord
Med en klassmodul skapar man en klass står det i läroböckerna. Jaha, det var ju en bra förklaring! Vad betyder det i praktiken? Jo, det betyder att koden i en klassmodul kan användas i många projekt, precis som koden i en standardmodul kan användas i många moduler i ett och samma projekt. Det är bra! Att skriva samma kod flera gånger är det värsta programmerare vet.Innehåll
»Relaterade artiklar
» Lathund - API-anrop» Lathund - Arrayer, egna datatyper och numreringar
» Lathund - Databaser
» Lathund - Felhantering
» Lathund - Grundläggande syntax
» Lathund - Inbyggda funktioner
» Lathund - Kortkommandon
» Lathund - Namngivning och deklarationer
» Lathund - Några extra tips
» Lathund - Slingor och operatorer
» Lathund - Spara, öppna och skriva ut filer
» Lathund - Variablers och konstanters räckvidd
Klassmoduler
Klassmoduler förklaras bäst med ett exempel. Öppna ett nytt projekt och välj att skapa en ActiveX DLL (tyvärr krävs en Professional eller Enterprise Edition av Visual Basic 5.0 eller 6.0). Ge projektet namnet Fordon (genom att klicka längst ner på menyn Project). Klassmodulen kan få namnet Bil. Skriv sedan följande kod i klassmodulen (för tydlighets skull används svenska namn):
Option Explicit
Private m_dblBensinvolym As Double
Private m_dblTankvolym As Double
Public Event Motorstopp()
Public Event Överfyllning()
Public Property Get Tankvolym() As Double
Tankvolym = m_dblTankvolym
End Property
Public Property Let Bensinvolym(ByVal dblData As Double)
m_dblBensinvolym = dblData
End Property
Public Property Get Bensinvolym() As Double
Bensinvolym = m_dblBensinvolym
End Property
Public Sub Tanka(dblPåfyllningsvolym As Double)
If dblPåfyllningsvolym < 0 Then Exit Sub
m_dblBensinvolym = m_dblBensinvolym + dblPåfyllningsvolym
If m_dblBensinvolym > m_dblTankvolym Then
m_dblBensinvolym = m_dblTankvolym
RaiseEvent Överfyllning
End If
End Sub
Public Sub Kör(dblKörsträcka As Double)
If dblKörsträcka < 0 Then Exit Sub
m_dblBensinvolym = m_dblBensinvolym - 0.8 * dblKörsträcka
If m_dblBensinvolym <= 0 Then
m_dblBensinvolym = 0
RaiseEvent Motorstopp
End If
End Sub
Private Sub Class_Initialize()
m_dblTankvolym = 70
m_dblBensinvolym = 70
End Sub
Varsågod! Här har du en bil med full tank! Du kan använda klassen Bil i andra projekt om du kompilerar koden till en DLL-fil. Klassen Bil har två egenskaper (Tankvolym och Bensinvolym), två metoder (Kör och Tanka), samt två händelser (Motorstopp och Överfyllning). Egenskapen Tankvolym går endast att läsa, inte att ändra.
Det är inte mycket som skiljer koden i en klassmodul från koden i standardmoduler. Subrutiner och funktioner är klassens metoder. Egenskapsprocedurer är klassens egenskaper. Händelser deklareras med uttrycket Event (för tydlighets skull kan man skriva Public Event) i huvudet av en klassmodul och triggas i procedurerna i samma klassmodul med uttrycket RaiseEvent.
DLL-filer kan du placera i systemmappen (C:\Windows\System om du kör Windows 95, 98 eller Me, C:\Winnt\System32 om du kör Windows NT 4.0 eller 2000 och C:\Windows\System32 om du kör Windows XP). Till sist måste DLL-filer registreras, vilket lättast görs med ett program som COM Explorer. I ett nytt Visual Basic-projekt kan du sedan välja References... på menyn Project och sätta en bock på rätt rad...
...så får du tillgång till klassen Bil genom att t ex skriva
Public WithEvents Kärran As Bil
i huvudet av en formulärmodul eller klassmodul i det nya projektet.
Ordet WithEvents kan utelämnas. Om ordet utelämnas kan sistnämnda kodrad även skrivas i huvudet av en standardmodul, men då får man inte tillgång till händelserna Motorstopp och Överfyllning. När du behöver en ny bil kan du skriva
Set Kärran = New Bil
och köra en sväng på stan:
Kärran.Kör(50)
Man bör skriva
Set Kärran = Nothing
när man inte behöver bilen mera. Så bör man göra med alla objektvariabler i Visual Basic när man inte behöver dem mera, annars kan man få problem. När man använder klassmoduler finns det en särskild anledning att skriva denna sats. Om man inte skriver satsen kommer klassmodulens händelse Terminate inte att äga rum och den kod som man eventuellt har skrivit i motsvarande händelseprocedur kommer inte att köras.
I Visual Basic .NET har Microsoft börjat med "garbage collection", precis som i Java, men i äldre versioner av Visual Basic får man städa själv.
Naturligtvis kan man skapa flera klassmoduler i projektet Fordon ovan. Man kan t ex skapa en klassmodul som heter Cykel, en som heter Moped osv. Om man vill att en procedur ska vara tillgänglig i alla moduler i projektet Fordon, men inte exponeras som en metod utanför projektet, kan man använda ordet Friend istället för Public. Ordet Friend används bara när man deklarerar procedurer i klassmoduler, inte när man deklarerar variabler och konstanter. Det finns en annan viktig regel för klassmoduler: konstanter kan inte deklareras med ordet Public.
0 Kommentarer