Avatar billede jpi Mester
11. juli 2007 - 00:03 Der er 15 kommentarer og
1 løsning

Forskelligt indhold til samme function

Jeg har en klasse med forskellige funktioner.
Klassen skal bruges i forskellige implementeringer af et program, og der er en/flere functioner der skal virke forskelligt afhængigt af hvilket program der køres.

Jeg har derfor laves klassen i en fil og vil så lave de program-specifikke functioner i en Local-classe-fil.

Så afhængigt af hvilken af disse local-classe-filer der er på det enkelte progtram vil funktionen virke efter hensigten.

Men hvordan skal jeg gøre det ?

Basic eksempel:
Klasse bil
Function TestNummerplade
Den function kan skal være forskellig afhængig af hvilket land bilen kører i.
Klassen bil laves i en dll-fil, men funktionen TestNummerplade (der også skal tilhøre klassen bil) skal ligge i en separat sted-specifik dll-fil.

Hvordan gøres det ?
Avatar billede arne_v Ekspert
11. juli 2007 - 00:27 #1
Dit hoved programmer bestemmer hvilken DLL der skal benyttes og loader
denne dynamisk og instantierer en klasse fra denne som implementerer et
kendt interface.
Avatar billede jpi Mester
11. juli 2007 - 00:38 #2
Jeg tror ikke jeg har formuleret mig særlig tydeligt :-)

Kort sagt, så skal jeg tilføje en funktion til en eksisterende klasse (dll-fil). Kan dette lade sig gøre ? Og i givet fald, hvordan ?
Avatar billede arne_v Ekspert
11. juli 2007 - 01:11 #3
Ikke helt som beskrevet.

Men forskellen på det og så have f.eks. en abstrakt klasse hvor du instantierer
forskellige konkrete sub klasser der loades dynamisk fra en DLL er ret lille.
Avatar billede jpi Mester
11. juli 2007 - 09:42 #4
Forstår ikke lige hvad du mener...

Mere konkret:
Jeg har lavet en klasse som jeg skal bruge i flere programmer. Alle de funktioner der er indeholdt i klassen er ens for alle programmer.
Men så er der nogle funktioner der skal virke forskelligt på de forskellige programmer. En måde at løse det på er at lave forskellige funktioner til de forskellige programmer. Men det synes jeg ikke er så "pænt", da opbygningen af et yderligere program, så kræver at jeg retter i selve klassen, med tilføjelse af en funktion.

Jeg vil i stedet lave en tilføjelse til klassen hvor den/de førnævnte funktioner er indeholdt. Disse tilføjelser vil så ligge i en separat dll-fil som er specifik for det enkelte program, og således skal der ikke pilles ved klassen.

Kan dette lade sig gøre ? Og hvordan ?

Håber det er bedre beskrevet nu ;-)
Avatar billede arne_v Ekspert
12. juli 2007 - 02:33 #5
Det kan lade sig gørr præcis som jeg beskriver det.

Du laver en abstrakt basis klasse med den fælles funktionalitet.

For hver variant laver du en ny klasse med de ekstra metoder. De buildes
så til individuelle DLL'er.

Hoved programmet kan så enten compiles mod en specifik DLL eller du kan loade
dynamisk.
Avatar billede jpi Mester
12. juli 2007 - 11:22 #6
Jeg forstår godt konceptet/tankegangen, men det kniber med udførelsen...

Eksempelvis laver jeg MASTER-klassen Bil således:

Class Bil

private _farve as string

public sub new()
  farve = "grøn"
end sub

public function VisFarve() as string
  return _farve
end function

Dette kompileres til en dll.

Slave-klassen:

Class Bil

public sub SkiftFarve()
  _farve = "rød"
end sub

Hvordan fortæller jeg SLAVE-klassen at den skal være un "underklasse" af den anden Bil-klasse ?
Skal jeg have den første dll-fil med i den anden eller hvordan ?

Og når jeg skal bruge det i hovedprogrammet, skal jeg så have begge dll'er med eller kun SLAVEN (hvis den indeholder Master og Slave?)
Avatar billede arne_v Ekspert
12. juli 2007 - 14:23 #7
Slave-klassen:

Public Class SpecialBil
Inherits Bil

public sub SkiftFarve()
  _farve = "rød"
end sub

end class
Avatar billede arne_v Ekspert
12. juli 2007 - 14:28 #8
Og _farve skal saa vaere protected og ikke private
Avatar billede arne_v Ekspert
12. juli 2007 - 14:28 #9
Begge DLL skal vaere der
Avatar billede jpi Mester
12. juli 2007 - 14:31 #10
Og så skal man "udefra" programmet altid bruge SpecialBil i stedet for Bil når man laver et objekt. Korrekt ?
Avatar billede jpi Mester
12. juli 2007 - 14:37 #11
Eller er det muligt at lade slave-klassen hedde det samme som masterklassen, således at man bare bygger videre på en eksisterende klasse ? Programmet ser så kun slave-klassen og de kald den ikke kender sender den videre til masterklassen. Er det muligt ?
Avatar billede arne_v Ekspert
12. juli 2007 - 14:40 #12
Ja.

----

Husk at du kan skrive:

Dim b As Bil = new SpecialBil
Avatar billede arne_v Ekspert
12. juli 2007 - 14:45 #13
Du kan altid bruge en sub klasse alle de steder hvor basis klassen optrader.
Avatar billede jpi Mester
12. juli 2007 - 14:48 #14
OK Tak, jeg vil prøve at lege lidt med det og vender tilbage
Avatar billede arne_v Ekspert
22. september 2007 - 21:59 #15
all set ?
Avatar billede jpi Mester
24. september 2007 - 10:28 #16
Har været ferie- og arbejdsramt, så jeg har ike fået kigget på det. Jeg er dog sikker på at det nok skal lykkes, så du får point og så må jeg oprette et nyt spm, hvis jeg har behov for yderligere hjælp.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester