09. juli 2004 - 15:08Der er
4 kommentarer og 1 løsning
Constructor til klasse
Jeg er i gang med at sætte mig ind i klasser i Excel VBA, og så tænkte jeg på, hvordan jeg får adgang til constructoren for klassen?
Givet klassen clsCircle (der beskriver en cirkel):
Option Explicit
'declare properties Private mX As Double Private mY As Double Private mRadius As Double
'constructor Private Sub clsCircle_Initialize(dblX As Double, dblY As Double, dblRadius As Double)
'store mX = dblX mY = dblY mRadius = dblRadius
MsgBox ("instants oprettet")
End Sub
'set the x-coordinate Public Property Let X(ByVal dblX As Integer)
mX = dblX
End Property
'set the y-coordinate Public Property Let Y(ByVal dblY As Integer)
mY = dblY
End Property
'set radius Public Property Let Radius(ByVal dblRadius As Double)
mRadius = dblRadius
End Property
'get area Public Property Get Area() As Double
Area = 3.14 * mRadius * mRadius
End Property
Så bliver jeg nødt til først at instantiere den, derefter definere X, Y og Radius hver for sig. Hvordan får jeg ordnet klassen, så jeg f.eks. bare kan skrive
Dim c as clsCircle
Set c = new clsCircle(5,10,5)
?
Altså så jeg får en klasse med koordinater (5,10) og radius 5
Hverken VB 6.0 eller VB A er fuldt ud objekt orienteret, og en af de ting der gør at det ikke er fuldstændigt er manglen på konstruktor. Så derfor det du vil, kan faktisk ikke lade sig gøre - Desværre...
Mig, der kun kender VB og VBA, men ikke fx. C++ og andre "ægte" objektorienterede sprog, er da ret nysgerrig efter at vide hvad en constructor egentligt er..?
Når du instantierer en klasse, så er constructoren en metode med samme navn som klassen, der kaldes automatisk. Dermed kan man f.eks. skrive:
Dim c as clsCircle
c = new Circle(5,5,20)
hvilket vil give mig en cirkel i (5,5) med radius 20. Da der ikke findes en constructor, så er man nødt til først at instantiere den og derefter kalde en funktion, f.eks.
Dim c as clsCircle
Set c = New clsCircle
Call c.init(5,5,20)
Altså snakker vi groft sagt om, at man bliver nødt til at bruge en hel linje ekstra, men det er jo stadigvæk irriterende ;)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.