Hej igen! Jeg har 3 specifikke spørgsmål jeg meget gerne vil have besvaret:
1. Hvorfor er det overhovedet nødvendigt at have egenskabsprocedurer? Man kan vel bare bruge variable som repræsentant for en egenskab?
2. Bruger man kun egenskabsprocedurer i forbindelse med klassemoduler, eller kan man også bruge dem i andre sammenhænge, hvor man bare har et formmodul/standardmodul?
3. Når man fx. skriver
public property get person() person = person_navn end property
så kan man læse egenskaben person sådan:
(objektnavn).person
men hvis man nu ikke har lavet et objekt, men kun en egenskabsprocedure, hvad sætter man så ind i stedet for objektnavn...er det navnet på formen?
----------------------formmodul 2 -------------------------- Option Explicit Private nSekunder As Integer, nSlut As Integer
Public Property Get Sekunder() Sekunder = nSekunder End Property
Public Property Let Sekunder(vNewValue) nSlut = vNewValue nSekunder = 0 End Property
Public Property Let Overskrift(vNewValue) txtShow.Text = vNewValue frmDialog.Refresh End Property
Private Sub Form_Activate() Timer1.Enabled = True Timer1.Interval = 1000 nSekunder = 0 End Sub
Private Sub Form_Load() frmDialog.Overskrift = "" nSekunder = 0 nSlut = 0 End Sub
Private Sub Timer1_Timer() nSekunder = nSekunder + 1 Label1.Caption = nSekunder If nSekunder >= nSlut Then Timer1.Enabled = False frmDialog.Hide End If End Sub
Ad 1) Det er ikke nødvendigt at have Egenskaber, men det kan være praktisk. Det er en meget basal ting i OOP. Indkapslingen gør, at du får lejlighed til at køre noget kode før Sekunder returneres. Eksempelvis kunne man forestille sig at du ønskede at opdatere værdien eller lignende. I dit eksempel bruges det blot til at give læse-adgang, men ikke skrive-adgang til feltet. Hvis din klasse f.eks. modellerer en timer der måler sekunder, giver det ikke nødvendigvis mening at man kan sætte værdien af sekunder. Generelt, indkapslingen er med til at gøre den klassens abstraktion så komplet som mulig.
Det er skam slet ikke nødvendigt, men det er en af de grundlæggende principper i OOP, hvor det går under betegnelsen ”encapsulation” (indkabsling).
Nogle fordele:
1) Man kan senere ændre den indre implementation uden at skulle ændre interfacet til omverdenen. Dermed skal man ikke til at tilrette alle de klasser som afhænger af denne klasse. 2) Du kan gøre din property til read-only i forhold til omverdenen... 3) ... eller write-only. 4) I forbindelse med at du manipulere din property kan du samtidigt udføre anden kode. Et eksempel kunne være at du havde en indre Integer variabel i din klasse som kun må have værdier over 0. Denne variabel kan eksponeres til omverdenen via en property. Når nogen forsøger at sætte propertyen til en negativ værdi så ignoreres dette simpelthen og ellers så sættes variablen til den nye værdi. 5) Du kan have en meget kompleks indre datastruktur. Denne gøres synligt via nogle simple properties ud af til. Et eksempel kunne være en lænket liste hvor du internt har brug for at kunne sætte elementer ind eller tage dem ud. I sprog som C++ ville dette involvere en masse pointer-gymnastik som ikke er vigtig set udefra. Udefra ville man kun have brug for nogle simple properties som ListHeader og ListTail etc.
Ad 2.
Man kan bruge properties hver eneste gang at man har en klasse.
14/06-2005 10:11:47> Så vidt jeg ved har du faktisk en klasse. Du laver den godt nok ikke selv, men når compileren behandler din kode så er noget af det første netop at pakke formen ind som en klasse.
Dette er godt nok en oplysning mere af en ren teknisk karakter - jeg er ikke sikker på at det er noget du kan bruge praktisk.
Egenskaben .person er en egenskab/property der hører til et objekt. Opretter du ikke en instans af et objekt, der hører til den class hvori du har defineret .person, kan .person ikke bruges.
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.