Bookmark and Share

Svårighetsgrad
Svårighetsgrad
Betyg (15 röster)
BetygBetygBetygBetygBetyg
 

Objektens liv

Inledning

Objekt lever samma liv som deklarerade variabler. De skapas vid en deklaration, vid OOP brukar man säga att man skapar en instans av en klass, d v s ett objekt. Objektet kanske är deklarerad i en loop och finns således bara i själva loop'en. Det är viktigt att veta variablers och objekts räckvidder när man programmerar!

Det finns två viktiga stadier i ett objekts livscykel:

I C# anropas objektets konstruktor med det reserverade ordet new. T ex:

En klass kan även ha olika konstruktor-funktioner med olika parametrar. T ex:

Denna konstruktor bygger upp en sträng med texten aaaaaaaaaa, d v s 10 upprepningar.

En viktig sak i C# är att objekt "dör" inte direkt då man tycker att de borde försvinna. D etta sker först då C#?s utför sin skräpuppsamling (Garbage Collection), då anropas objektets destruktor. På så sätt kan man se destruktorn som objektets sista önskan innan det försvinner.

Definiera medlemmar och klassmedlemmar

Det mesta ni har använt hittills har varit statiska medlemmar (static). Dessa har speciella egenskaper som gör att de delas mellan klasser av samma typ. Det innebär också att man inte behöver skapa ett objekt för att kunna använda statiska medlemmar. T ex:

Dessa funktioner kan du använda utan att skapa ett objekt av typen Console. Detta p.g.a. att de är deklarerade som static.

När skapade ni senast ett objekt av klassen Console? Svaret är aldrig. Det behövs helt enkelt inte då alla medlemsmetoder är statiska, d.v.s alla funktioner du brukar använda.

Klassmedlemmar är ett namn på allt som finns kodat i klassen, det kan vara variabler (medlemsvariabler) eller metoder (medlemsmetoder). Ordet medlem används bara för att markera att variabler/metoder hör till en viss klass.

Klassmedlemmarna kan deklareras som antingen private (privat) eller public (publik). Private innebär att bara klassen själv har rätt till att använda medlemmen, det kan vara en variabel men också en funktion. Public är då motsatsen och betyder att om jag skapar ett objekt så kan jag alltid komma åt alla publika (public) medlemmar ?utifrån? objektet.

Dags för några exempel

Ovanstående exempel har både konstruktor och destruktor. I klassen finns även en public variabel i, och en private variabel j. Klassen innehåller även metoden DoSomething().

Skapa objekt

Att skapa objekt gör med det reserverade ordet new. Det finns inga begränsningar över hur många objekt man får ha eller av vilken typ de är. Det ser precis ut som en vanlig variabeldeklaration:

I fallet ovan skapas 4 olika objekt (j, k, l och m) fast alla av samma typ (MyClass)!

De skapas även på 3 olika sätt med 3 olika konstruktorer. Detta är såklart förutsatt att dessa 3 olika konstruktorer är implementerade i klassen MyClass. Minns att man kan ha hur många olika konstruktorer som helst.

Att implementera betyder just att "koda", man ser till att det "finns med", man realiserar något.

Hur vet man vilken som anropas? Jo kompilatorn matchar konstruktorns inparametrar med det anropet man gör när man skapar ett objekt. Finns det ingen konstruktor som passar så kommer du få ett felmeddelande. Finns det 2 st konstruktorer med samma slags inparametrar så kommer kompilatorn inte att veta vilken du menar, du kommer få ytterligare ett fel, då det ej är tillåtet att ha två likadana konstruktorer i samma klass.

Använd ett objekt

bild

Jag skapar en klass genom att högerklicka på mitt projekt o välja Add->Class.

I klassen lägger jag till en privat medlemsvariabel j och en public variabel i samt en metod DoSomething().

Var noga med var du placerar dessa saker! Kolla koden nedan så ser du exakt hur detta borde se ut.


bild

I min main-metod så skapar jag först ett objekt av min klass nu:

Jag ser vad jag kan göra med mitt objekt nu när jag har skapat det genom att använda variabelnamnet obj1. Efter att jag skrivit punkten så kommer listan upp som syns på bilden till vänster.

Du känner igen två saker här, i och DoSomething(). Vad hände med j? Jo variabeln j är privat så vi kommer inte åt den från objektet. Inne i klassen kan vi dock använda den. Den har blivit en intern variabel som bara klassen MyClass kan komma åt. Vi använder vårt objekt lite och ser vad som händer:


Resultatet:

bild

Viktiga begrepp

  • instans/eng. instance
  • Konstruktion/eng. Construction
  • Destruktion/eng. Destruction
  • Garbage Collection/sv. skräpinsamling
  • statiska
  • implementera/eng. implement

Kommentarer

1 inlägg