Hvornår skal jeg bruge Static eller new bil();

Tags:    c#

hej

Jeg kunne godt tænke mig at for svar på en lang række spørgsmål som jeg har siddet ind omkring c#

- Hvornår bruger man Static i class?
- Hvornår skal jeg bruge New bil(); <- bare f.eks

Jeg prøver at lege lidt med det,

Tricks.cs

Fold kodeboks ind/udCSharp kode 


bil.cs

Fold kodeboks ind/udCSharp kode 



Webform.aspx.cs

Fold kodeboks ind/udCSharp kode 


- Ved godt at jeg for fejl på det område.

men mit spørgsmål går mest på Hvornår skal jeg tildel Static & Hvornår skal jeg ikke bruge det?

og hvornår skal jeg bruge New bil();

Det vil være super lækkert hvis der kun komme noget kode f.eks som gøre at jeg måske forstår det lidt bedre.

Håber du kan hjælpe mig med det her problem.



4 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 20 karma
Sorter efter stemmer Sorter efter dato
Hej Jesper

Et eksempel kunne være ting du ikke ønsker at have liggende mere end en gang. Det kan være en variabel, det kan være et objekt, hvad du nu end ønsker at bruge det til, men skal jeg nok give eksempler på senere.
Det vigtige her er at forstå at det der er static er en delt instans imellem objekter af samme type.

Hvis vi tager udgangspunkt i du skal holde styr på en serie biler.

Din bil kan du fx. lave sådan her:
Fold kodeboks ind/udCSharp kode 


Hvis vi ser på forskellen på static variabel Wheels, og din property Seats så kan det bedst ses via kode:
Fold kodeboks ind/udCSharp kode 

Her kan du se at du kan tilgå Wheels uden at have en instans af din Car, fordi den er static. Denne variabel er derfor delt på tværs af ALLE dine cars objekter uden at behøve at have en instans af objektet.
Hvis du så så ser på Seats, så er den ikke delt på tværs af cars objekter, men sættes kun på hvert eneste instans af objektet. Altså her skal du lave en ny instans (= new Car) for at kunne tilgå denne property.
Så hvert objekt kan have forskelligt antal Seats, men Wheels er fælles for alle af typen Car.
Introteksten ville skrive "Bil 1 har 8 sæder og 4 hjul.Bil 2 har 6 sæder og 4 hjul".

Samme princip kan man så gøre gældende ved objekter også.
Hvis vi ser på foregående eksempel kan du se vi har klassen CarCollection, som er det objekt der styrer vores Cars. Ofte ville man lave et sådan objekt til at hente, gemme, søge, og holde på alle dine objekter af en speciel type (såsom Cars).

Ofte ville du så i din form sætte en variabel der hed CarCollection Cars = new CarCollection() og så have dit objekt der holder dine Cars.
Nu ligger alle dine data på dine cars så i dette objekt, og hvis du skulle bruge det et andet sted skal du sende denne variabel videre for at få disse data.
En anden måde er at lave en static variabel, og så ville alle kunne tilgå den delte værdi.
Et eksempel:
Fold kodeboks ind/udCSharp kode 

Så kunne du altid skrive MyCollections.MyCars for at få den ene instans af din CarCollection og alle ændringer der bliver lavet tilføjes til denne.

Eksemplet med at logge ind på en side, kan løses sådan, men fordi webudvikling er anderledes end applikationer så lad os vente med det eksempel til du har styr på nogle mere basale ting.

Det med webforms (som dit eksempel bygger på) er at du har dit objekt under opbygningen af siden og så smides alt væk. Så state håndtering er der intet af - det skal du selv lave.
Så i din webform har du load og så skabes din bil, siden renderes og sender resultatet til brugeren. Ændringerne skal du derfor selv læse ind når siden kommer tilbage til dig (ved fx at han klikker på en knap).
På en webside kan det som man deler være en bilsamling som er fælles for alle på siden - fx en opslagsside - så her kunne du bruge static.
En anden ting kunne være at tælle op hvor mange brugere du har på din side, som vil være delt for ALLE brugere.


Håber det gav dig lidt en ide om hvad betydning static har, og hvordan og hvorfor det bruges, og hvilke typer scenarier det kan give forskellig værdi at bruge static.
Spørg hvis mine eksempler ikke giver mening, så uddyber jeg gerne.



Indlæg senest redigeret d. 05.05.2015 12:11 af Bruger #17215
Statiske members og metoder er delt på tværs af alle instanser af en klasse. Når du bruger new, så opretter du en instans af en klasse. Instanser har per-instans data (members) som tilhører instansen og kan kun og kun tilgås via instansen.

Eksempel:

I et computerspil har du monstre repræsenteret ved en Monster-klasse. Du er interesseret i at vide hvor mange monstre der er i live lige nu. Et monster er i live så længe en instans af klassen Monster lever.

Antallet af levende monstre repræsenteres med en statisk variabel.

Når du opretter en ny instans af Monster (new Monster), så skal antallet af levende monstre inkrementeres (det foregår i constructoren). Når instansen dør, så skal tallet dekrementeres (det foregår i destructoren).

Fold kodeboks ind/udCSharp kode 


Håber det giver lidt mening



Dette er meget grundlæggende omkring objekt-orienteret udvikling i C#, det du spørger om. Og det er vigtigt at du forstår det rigtigt for at det bliver ordentligt. Så Jeg vil foreslå dig at låne eller købe bogen som hedder "C# Grundbog" af Niels Hilmar Madsen & Michell Cronberg.

Det er efterhånden en gammel bog, men stadig en bog der bruges i undervisningen flere steder.



Statiske members og metoder er delt på tværs af alle instanser af en klasse. Når du bruger new, så opretter du en instans af en klasse. Instanser har per-instans data (members) som tilhører instansen og kan kun og kun tilgås via instansen.

Eksempel:

I et computerspil har du monstre repræsenteret ved en Monster-klasse. Du er interesseret i at vide hvor mange monstre der er i live lige nu. Et monster er i live så længe en instans af klassen Monster lever.

Antallet af levende monstre repræsenteres med en statisk variabel.

Når du opretter en ny instans af Monster (new Monster), så skal antallet af levende monstre inkrementeres (det foregår i constructoren). Når instansen dør, så skal tallet dekrementeres (det foregår i destructoren).

Fold kodeboks ind/udCSharp kode 


Håber det giver lidt mening


Hej Jakob.

Det giver okay, mening men det vil sige at man bruger new mest til at lige noget indhold ind i f.eks database eller overskrive nogle værdier som man har.

Men omkring Static forstå jeg det ikke lige helt?? Det kan det f.eks være hvis jeg vil log ind på en siden så bruger man static eller hvad ?,

(Du skal bare vide det jakob jeg er lidt ordblind og har nogle gange svært ved at forstå tingene men når de første sidder der så er de godt på plads.)



t