webForumDet fria alternativet

Åtkomst av instans?

.NET

17 svar · 345 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Hej,

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?

Mvh, Vide

Medlem sedan maj 20018 027 inlägg
#2

Den andra klassen kan få en referens till dataklassen (dvs den aktuella instansen av dataklassen).

Medlem sedan dec. 19998 577 inlägg
#3

Du menar att jag skall skicka in objektet via en sub eller funktion?

Medlem sedan dec. 20003 887 inlägg
#4

Ö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...

Medlem sedan dec. 19998 577 inlägg
#5

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...

Medlem sedan juni 20022 599 inlägg
#6

Kan du utveckla problemet? Gärna i form av konkreta exempel.

Medlem sedan dec. 19998 577 inlägg
#7

Självklart!

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.

Medlem sedan maj 20018 027 inlägg
#8

Engine^ skrev:

Ö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?

Medlem sedan maj 20018 027 inlägg
#9

Vide skrev:

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.

Medlem sedan dec. 20003 887 inlägg
#10

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.

Medlem sedan juni 20022 599 inlägg
#11

Vide skrev:

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.

Medlem sedan dec. 19998 577 inlägg
#12

Bra skrivet! Tack! :)

Men behöver jag verkligen en "Property Get" när det är en referens, eventuella ändringar slår väl igenom ändå?

Medlem sedan maj 20018 027 inlägg
#13

Vide skrev:

Bra skrivet! Tack! :)

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.

Medlem sedan dec. 19998 577 inlägg
#14

niko skrev:

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.

Sant, tänkte inte så långt! ;)

Tack för hjälpen!

Medlem sedan juni 20022 599 inlägg
#15

Vide skrev:

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. :)

Medlem sedan dec. 19998 577 inlägg
#16

Hehe, okej, men det finns inte VB eller? ;)

Medlem sedan juni 20022 599 inlägg
#17

Finns i VB.NET med namnet shared (static i C#).

Medlem sedan dec. 19998 577 inlägg
#18

Mjo, jag har lagt in en önskan att få bygga allt i .NET, men tillsvidare är det VB som gäller...

254 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)