static metoder er også det man kalder for klassemetoder. For at forstå det skal man kende forskellen på en klasse og et objekt. En klasse er _beskrivelsen_ af en struktur, dvs. et skema af hvordan eksempelvis en bil ser ud. Når man har et objekt har man gjort sin klasse "virkelig" og lavet en konkret bil (eks.) ud af det. Det vil sige følgende
- public class Bil
- {
- private string model;
- public string GetModel()
- {
- return model;
- }
-
- public string SetModel(string newModel)
- {
- model = newModel;
- }
- }
Dette er en enkel klasse med et skema der beskriver at en bil har en model man kan hente ved at kalde GetModel() metoden og sætte ved at kalde SetModel() metoden. Ikke noget statisk endnu.
Laver man en konkret bil - altså et objekt, fx. en Skoda, så gør man således:
- Bil myBil = new Bil();
- myBil.SetModel("Skoda");
myBil er nu et objekt af klassen Bil. Den har en helt konkret model som er skoda og jeg kan lave mange nye og forskellige biler ud fra samme klasse fx. Mercedes, Open, Fiat osv.
Lad og sige at jeg skal lave en metode der gælder for alle biler, dvs. den skal ikke gælde for den enkelte bil, men for biler generelt, lad os sige at jeg skal have en landekode for hvilket land alle bilerne tilhører. Jeg introducerer nu en statisk metode som findes på klassen (bemærk ikke på objektet) som en statisk metode, således:
- public class Bil
- {
- private string model;
- public string GetModel()
- {
- return model;
- }
-
- public string SetModel(string newModel)
- {
- model = newModel;
- }
-
- public static string GetLand()
- {
- return "Danmark";
- }
- }
Nu har jeg en statisk (klassemetode) på min bil som ikke gælder for en enkelt bil, men for alle biler. Det vil sige at jeg kan kalde:
Bil.GetLand(); og få "Danmark" tilbage
Fordi GetLand() er en klassemetode giver det ikke mening at kalde den inde fra et objekt (kun i visse situationer, fx. som nævnt ovenfor i singletons). Hvis man i ovenstående eksempel lavede en SetLand() metode og kaldte den med "Tyskland" vil man så også ændre det for alle og næste gang man kaldte GetLand() vil den ikke længere returnere "Danmark" men "Tyskland"
For mere omkring objektorienteret programmering se evt. start materialet for datalogi/softwareingeniør på Aalborg Universitet (afsnittet omkring klasser - klik til start for at se alt indholdet:
http://people.cs.aau.dk/~normark/oop-csharp/html/notes/classes_themes-init-ex-sect.html)Håber det giver mening.
Du kan ikke bruge static-metoder fra et objekt, og du kan ikke bruge ikke-static metoder fra andet end et objekt.
Det er vist ikke helt rigtigt. Hvis det er objektorienteret programmering man arbejder med - hvor skulle man så kalde sin statiske metode fra, man har vel ikke noget der ikke er objekter?
Indlæg senest redigeret d. 16.03.2012 19:41 af Bruger #2730