|
Konstruktører til klasser i VBScriptKonstruktører er noget man mangler i VBS, hvis man er vant til at arbejde med mere udviklede objektorienterede sprog. Vi kan desværre ikke tweake VBS til at understøtte dette, men vi kan lave en simulering af en konstruktør, nemlig ved at lave en factory-funktion, som kan tage de parametre vi ønsker klassen skal starte med at have når vi tager den i brug. Hvis vi laver en klasse der indeholder lidt egenskaber (for at illustrere princippet):
class CPerson Så skal denne klasse under normale omstændigheder oprettes således:
dim person Hvis vi laver en factory-funktion der tillader os at angive fornavn og efternavn i parameterlisten og returnerer et objekt af typen CPerson, hvor disse egenskaber er sat:
function newPerson(pFornavn, pEfternavn) ...kan vi i stedet oprette en klasse af typen CPerson således:
dim person Dette eksempel er ret simpelt, man kunne sagtens forestille sig større scenarier, hvor det ville være rart ikke at skulle forestå initieringen af objektets enkelte egenskaber der hvor det skulle bruges. Specielt i situationer hvor der er et mere komplekst regelsæt forbundet med at initiere objektet er det relevant at få det pakket væk i en factory-funktion. Der kunne sagtens være flere factory-funktioner til samme klasse og i disse sammenhænge kunne man oprette en Factory-klasse som dannede interface til oprettelse af selve klassen. Eksempelvis:
class CPersonFactory Med de sidste 2 linier i overnstående eksempel, får jeg mulighed for bare at kalde mine factory-funktioner uden at skulle oprette en instans af factory-objektet først. Det vil sige følgende kan benyttes: set person = PersonFactory.newPersonNavn("John", "Farnham") Så har vi også simuleret en statisk klasse... :-) Et alternativ til factoryEt alternativ til at lave en funktion som er ekstern til klassen er, at lave en funktion i klassen som tager nogle parametre som intialiserer objektet og derefter returnerer en reference til objektet selv. Det vil kunne ende i en sætning som ser således ud: set obj = (new CPerson)("John","Farnham") For at ovenstående fungerer, er det vigtigt at der er parantes omkring new CPerson, da dette, som bekdt opretter et objekt af klassen CPerson. For at kunne arbejde videre med objektet der oprettes i samme linie behøves paranteserne, da parameteren ellers vil blive oprettes som tilknyttet selve klassennavnet i stedet for objektet der kommer ud af new CPerson. Når det så er på plads, observerer vi, at objektet efterfølges af parantes med to strenge, hvilket rent faktisk er et funktionskald. Funktionskaldet sker til en default-funktion på objektet (derfor behøver vi ikke angive navnet på funktionen), som tager 2 parametre i dette tilfælde. For at variablen skal blive tildelt objektet som lige er oprettet, skal default-funktionen returnere en reference til objektet. Det ser nogenlunde således ud når det omsættes til en klasse:
class CPerson Desværre (men naturligt nok), kan der kun eksistere én default-funktion på en klasse, så dette trick fungerer kun, hvis man ikke har behov for mere end det til at initialisere sit objekt. |
| Sidst opdateret: 04-09-2010 23:22:37 |
|
Tilmeld link |
Tilføj Link |
Tilføj Link |
@-begynder Erklæring om beskyttelse af personlige oplysninger |