Har en liten kluring jag funderar på. Jag har flera klasser (detta går fortfarande att ändra på då jag fortfarande är i utvecklingsstadiet) som anropar varandra, i en klass har jag data och datalagring. Nu vill jag ifrån andra klasser komma den lagrade informationen som finns i denna dataklass.
Dataklass:
Lägger in info ifrån ASP-sida, och lagrar det i klassen.
Annan klass:
Vill hämta den informationen som finns i dataklassen.
Skapar jag en ny instans av klassen så får jag ju inte det som jag lagrat i dataklassen. Hur skall man lösa detta på ett smidigt sätt?
Jag har redan metoder för det i dataklassen. Det enda jag kan komma på är att skapa metoder i "mellanklassen" som agerar mellanhand åt ASPsidan och dataklassen.
Men jag tycker att det borde finnas bättre sätt...
Jag har en klass (data) som jag skickar inte värden och värdesobjekt till. Dessa värden skall vara samma för alla klasser som sedan anropar dataklassen.
Jag kan alltså inte skapa en instans av dataklassen i alla andra klasser eftersom dessa skulle blir separata instanser och därmed inte ha samma värden.
Jag vill dessutom lämna in värden till dataklassen ifrån en ASPsida (t.ex värden som är specifika för vilken sida man står på.).
Man skulle ju kunna skicka med dataklassens instans som skapatas i ASPsidan och skicka in den till varje klass, men det känns helt klart fel sätt att angripa problemet.
Öhm... bör du inte använda dig av metoder i dataklassen som returnerar/lagrar det du vill göra?
Låter onödigt att skapa kopior/kloner/skumma referenser...
Skumma referenser? På vilket sätt är det skumt med referenser? Självklart ska man använda metoder i dataklassen som returnerar/lagrar data. Men hur hade du tänkt dig att överhuvudtaget komma åt dessa metoder, om du inte har en referens till objektet?
Jag kan alltså inte skapa en instans av dataklassen i alla andra klasser eftersom dessa skulle blir separata instanser och därmed inte ha samma värden.
Nej, och det ska du inte göra heller. Du ska använda referenser istället. Du skulle kunna göra ungefär som nedan:
'koden i annan klass som ska utnyttja dataklass
Private refDataklass as clsDataklass 'ingen instans, bara något att hänga referensen på
'Metoder för att sätta respektive returnera referens
Public Property Set Dataklass(ByRef pDataklass as clsDataklass)
Set refDataklass = pDataklass
End Property
Public Property Get Dataklass() As clsDataklass
Set Dataklass = refDataklass
End Property
'I andra klasser kan du nu sätta referensen genom:
Set AnnanKlass.Dataklass = MinDataklass
Det sker ingen ny instantiering utav dataklassen. Alla klasser kommer på detta vis se samma instans.
Skumma referenser: jag tänkte på referenskopior... luddigt uttryckt
Jag vet inte om jag förstog Vides problem helt rätt. Om klassen är instansierad och en utomstående klass (eller annat) vill ändra/hämta/lägga till värden, så tänker jag att det i den första klassen finns metoder att anropa som utför det efterfrågade. Jag verkar missa problemet... vet sidan inte att klassen är skapad? Om så borde UlfTs lösning fungera.
Jag har en klass (data) som jag skickar inte värden och värdesobjekt till. Dessa värden skall vara samma för alla klasser som sedan anropar dataklassen.
Hmm. På ett sätt så känns det som om du egentligen efterlyser statiska metoder/medlemmar i din dataklass? Dvs värden som är globala/gemensamma för alla instanser av dataklassen.
Tyvärr så finns detta inte tillgängligt i VB/VBScript och du är nog hänvisad till att göra som UlfT skriver.
Ett alternativ är att lagra värdena globalt på nåt helt annat sätt tex i sessions, eller i databasen.
Men, som sagt, det är möjligt att jag missförstår vad du menar.
Men behöver jag verkligen en "Property Get" när det är en referens, eventuella ändringar slår väl igenom ändå?
Du behöver ingen "Property Get" för att ändringar i dataklassen ska slå igenom. Det jag tänkte på var om du ville sätta ytterliggare referenser till att referera till samma instans av dataklassen. Då hade en "Property Get" kommit väl till pass.
Hmm. På ett sätt så känns det som om du egentligen efterlyser statiska metoder/medlemmar i din dataklass? Dvs värden som är globala/gemensamma för alla instanser av dataklassen.
Mja, fast man skall kunna sätta värdena när som helst, samt kunna ändra dom. Samt att dom skall slå igenom till alla instanser när det görs en ändring.
Antar att det inte finns!? Så jag går på UlfTs metod.
UlfT skrev:
Du behöver ingen "Property Get" för att ändringar i dataklassen ska slå igenom. Det jag tänkte på var om du ville sätta ytterliggare referenser till att referera till samma instans av dataklassen. Då hade en "Property Get" kommit väl till pass.
Mja, fast man skall kunna sätta värdena när som helst, samt kunna ändra dom. Samt att dom skall slå igenom till alla instanser när det görs en ändring.
Det är nog just precis en ganska exakt definition av statiska properties/medlemsvariabler. :)