Grundkurs i C-Sharp - Strukturer
Förord
Det kan i början vara svårt att förstå sig på skillnaden mellan vad en struktur är och vad en klass är. Generellt kan man säga att en struktur är en klass fast med speciella egenskaper och restriktioner. Den absolut största skillnaden är att en struktur skapas på datorns stack och en klass skapas på datorn heap. Om du inte har någon kunskap om skillnaden på dessa så kan vi nöja oss med att säga att saker som allokeras på stacken ger oftast bättre prestanda and saker som allokeras på heap.Innehåll
»»
»
»
»
»
»
Relaterade artiklar
» Grundkurs i C-Sharp - Arv» Grundkurs i C-Sharp - Gränssnitt
» Grundkurs i C-Sharp - Introduktion
» Grundkurs i C-Sharp - Namnrymder
» Grundkurs i C-Sharp - Polymorphism
» Grundkurs i C-Sharp - Statiska medlemmar
» Grundkurs i C-Sharp - Undantagshantering
» Grundkurs i C-Sharp - Åtkomstmodifiering
» Grundkurs i C-Sharp - Överlastning
Skillnaden på var en struktur lagras gentemot en klass är att en struktur är en värdetyp (value type) och klasser är en referenstyp (reference type). Du kan läsa mer om vad detta är i min artikel om datatyper. I grova drag betyder detta att man arbetar direkt med informationen och inte med referenser till den.
För att skapa en struktur använder man sig av nyckelordet struct. Följande exempel visar det mest klassiskas exempel på en struktur som finns. Det är en struktur som lagrar information på en punkt i en två-dimensionell miljö.
Liksom klasser så kan en struktur deklarera en eller flera konstruktorer. Det finns en stor och avgörande skillnad dock, och det är att man inte kan deklarera en standard konstruktor, dvs. en som inte tar några parametrar. En standard konstruktor skapas alltid automatiskt och används för att initiera medlemmarna i en struktur till sina standard värde.
Följande exempel utökar vår Point struktur så att den har en konstruktor som används för att sätta värdena på x resp. y koordinaterna för punkten.
Tillskillnad från en klass så kan inte en struktur deklarera en destruktor. Det finns inte mycket mer att säga om saken utan detta är något man får leva med och det ska inte vara så svårt.
En struktur kan inte ingå i någon form av ärvning överhuvudtaget. Detta betyder att en struktur inte kan ärva från en annan struktur, en struktur kan inte ärva från en klass och en klass kan inte ärva från en struktur.
Det är inga problem att implementera gränssnitt i en struktur, man gör precis på samma sätt som när man gör detta med en klass. Följande exempel visar hur man implementerar ett gränssnitt i en struktur.
För att verkligen förstå sig på vad man har för nytta av att använda strukturer istället för klasser så är det viktigt att läsa på om värdetyper (value types) och referenstyper (reference types). Ta dig tiden att förstå dessa koncept så kommer du att ha ytterligare en kraftfull teknik till ditt förfogande.
Andreas bor i Helsingborg där han studerar Software Engineering vid Lunds Tekniska Högskola. Han har många års erfarenhet inom både Windows samt internet baserad programmering inom en rad olika programmeringsspråk. Ni kan komma i kontakt med Andreas på andreas@selfinflicted.org.
Struct
För att skapa en struktur använder man sig av nyckelordet struct. Följande exempel visar det mest klassiskas exempel på en struktur som finns. Det är en struktur som lagrar information på en punkt i en två-dimensionell miljö.
struct Point
{
public int x;
public int y;
}
Konstruktor
Liksom klasser så kan en struktur deklarera en eller flera konstruktorer. Det finns en stor och avgörande skillnad dock, och det är att man inte kan deklarera en standard konstruktor, dvs. en som inte tar några parametrar. En standard konstruktor skapas alltid automatiskt och används för att initiera medlemmarna i en struktur till sina standard värde.Följande exempel utökar vår Point struktur så att den har en konstruktor som används för att sätta värdena på x resp. y koordinaterna för punkten.
struct Point
{
public int x;
public int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
Destruktor
Tillskillnad från en klass så kan inte en struktur deklarera en destruktor. Det finns inte mycket mer att säga om saken utan detta är något man får leva med och det ska inte vara så svårt.
Ärvning
En struktur kan inte ingå i någon form av ärvning överhuvudtaget. Detta betyder att en struktur inte kan ärva från en annan struktur, en struktur kan inte ärva från en klass och en klass kan inte ärva från en struktur.
Gränssnitt
Det är inga problem att implementera gränssnitt i en struktur, man gör precis på samma sätt som när man gör detta med en klass. Följande exempel visar hur man implementerar ett gränssnitt i en struktur.
interface Graphics
{
void Paint();
}
struct Square : Graphics
{
public void Paint()
{
// Koden för att rita objektet
// placeras här.
}
}
0 Kommentarer