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:
- class Car
- {
- static int Wheels = 4;
- public int Seats = 5;
-
- public Car()
- {
-
- }
- }
Hvis vi ser på forskellen på static variabel Wheels, og din property Seats så kan det bedst ses via kode:
- public class CarCollection
- {
- public CarCollection()
- {
- string IntroTekst = "Opret en ny bil med " + Car.Wheels + " hjul. ";
- List<Car> CarsList = new List<Car>();
- Car newCar = new Car(5);
- newCar.Seats = 8;
- CarsList.Add(newCar);
- newCar = new Car(4);
- newCar.Seats = 6;
- CarsList.Add(newCar);
- for(int i = 0; i < CarsList.count(); i++)
- {
- IntroTekst += "Bil " + i + " har " + CarsList.ElementAt(i).Seats + " sæder og " + CarsList.ElementAt(i).Wheels + " hjul."
- }
- }
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:
- public class MyCollections
- {
- static CarCollection MyCars = new CarCollection();
- }
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