|
| VB6: designspørgsmål (public,private,funct~ Fra : Jesper Stocholm |
Dato : 20-03-02 14:34 |
|
Jeg er ved at programmere en dll, der skal have to hovedfunktioner. Disse
er erklærede som
Public Function someFunc()
End Function
Hver af disse funktioner kalder i deres arbejde en række underfunktioner,
dvs det ser nogenlunde således ud:
Public Function getRecordset(i1,i2,i3)
var11 = function11(i1,i2,i3) (returnerer en long)
var12 = function12(var1) (returnerer en streng)
var13 = function13(var2) (returnerer et recordset)
getRecordset = var13
End Function
Public Function getArticle(i1,i4)
var21 = function21(i1,i4)
var22 = function22(var21)
var23 = function)23(var22)
End Function
Men jeg er i tvivl om, hvordan jeg skal erklære mine underfunktioner. Skal
de erklæres som
Private Sub
Public Sub
Private Function
Public Function
?
Jeg er i tvivl om, hvad forskellen egentlig er imellem de fx Sub og
Function. Kan I hjælpe mig med at komme lidt nærmere en forståelse af det ?
:)
--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|
| |
Mikkel Bundgaard (20-03-2002)
| Kommentar Fra : Mikkel Bundgaard |
Dato : 20-03-02 16:49 |
|
"Jesper Stocholm" <spam200203@stocholm.dk> wrote in message
news:Xns91D7941DF5472spamstocholmdk@130.226.1.34...
<SNIP>
>
> Men jeg er i tvivl om, hvordan jeg skal erklære mine
> underfunktioner. Skal de erklæres som
>
> Private Sub
> Public Sub
> Private Function
> Public Function
>
> ?
>
> Jeg er i tvivl om, hvad forskellen egentlig er imellem de fx Sub
> og Function. Kan I hjælpe mig med at komme lidt nærmere en
> forståelse af det ?
Forskellen mellem Sub og Function er, at Sub ikke kan returnere
noget, det kan en Function. Så hvis en delrutine ikke returnerer
noget, kan du erklære den som Sub, med dette viser du brugere
af rutinen, at den ikke returnerer noget.
Mht. til Private/Public, så erklær alle hjælperutiner (og andet
brugerne ikke skal se) som Private og erklær kun de rutiner, der
skal bruges udadtil som Public.
Håber du kan bruge det til noget
--
Mikkel Bundgaard
IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum
| |
Tomas Christiansen (20-03-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 20-03-02 22:49 |
|
Jesper Stocholm skrev:
> Jeg er ved at programmere en dll, der skal have to hovedfunktioner.
Disse
> er erklærede som
>
> Public Function someFunc()
> End Function
Du bør altid, altid, altid angive typen på funktionsværdien, dvs.
tilføj "As" og typen, f.eks:
Public Function someFunc() As Long
End Function
Selv hvis du ønsker (hvad du formentlig slet ikke gør) at bruge typen
variant, bør du angive dette:
Public Function someFunc() As Variant
End Function
Hvis du ikke angiver noget er benyttes typen variant, men så har du
ikke vist at du rent faktisk har taget stilling til typen, og det kan
(af en anden programmør/dig selv om 2 år) opfattes som om du har glemt
at skrive noget.
> Public Function getRecordset(i1,i2,i3)
> var11 = function11(i1,i2,i3) (returnerer en long)
> var12 = function12(var1) (returnerer en streng)
> var13 = function13(var2) (returnerer et recordset)
> getRecordset = var13
> End Function
Her bør du erklære var11, var12 og var13 af typer svarende overens med
typen for funktionsværdien på den tilsvarende funktion11, -12 og -13.
> Public Function getArticle(i1,i4)
> var21 = function21(i1,i4)
> var22 = function22(var21)
> var23 = function)23(var22)
> End Function
Dette bør være en procedure (dvs. erklæret med sub i stedet for
function), idet der ikke returneres en værdi (mon dog ikke at det er
en fejl - jævnfør navnet getArticle...).
> Men jeg er i tvivl om, hvordan jeg skal erklære mine
underfunktioner. Skal
> de erklæres som
>
> Private Sub
> Public Sub
> Private Function
> Public Function
Hvis en underrutine kun skal bruges fra samme source-fil (dvs. samme
*.frm, *.bas, *.cls), kan de erklæres med "private". Derved er de ikke
synlige fra andre source-filer/andre programmer. Brug af "public" gør
dem synlige.
> Jeg er i tvivl om, hvad forskellen egentlig er imellem de fx Sub og
> Function. Kan I hjælpe mig med at komme lidt nærmere en forståelse
af det ?
En funktion vil altid returnere MINDST én værdi, og en procedure (det
kalder Microsoft altså sub's for) vil returnere nul eller flere
værdier.
Hvordan nu det?
Jo, brugen af "ByRef" eller "ByVal" før hver formel parameter angiver
om der skal arbejdes på de originale data eller på den kopi. Du har
dermed muligheden for at returnere flere værdier i samme kald (af en
procedure eller en funktion), hvis de angives som parametre.
Eksempel: Public Function getArticle(ByVal Id as String, ByRef Title
As String, ByRef Body As String) As Boolean
Her hentes en "article" frem på basis af dens Id. Den er opdelt i
Title og Body, og funktionsværdien fortæller om artiklen blev fundet
eller ej (true/false).
-------
Tomas
| |
|
|