C# Snabbreferens
  • C# snabbreferens
  • Lathund: Skapa projekt
  • Lathund: koda i konsolen
  • Lathund: koda i WPF
  • Kompilering och publicering
  • Externa resurser
  • Grundläggande
    • Datatyper […]
      • String
      • Tuples
      • Enum
    • Fel
    • Typkonvertering
    • Operatorer
    • Boolska satser
    • Konsolen (Console)
    • If-satser
    • Loopar
    • Listor och arrayer
    • Slump (Random)
    • Strings
    • Metoder
    • Använda bibliotek (using)
    • Delegates, events och lambdas
    • Matematik (Math)
    • Vektorer (Numerics)
    • Datum och tid
    • Try-catch och Exception
    • Namngivning
    • Begrepp
    • Reference vs value types
    • Projektstruktur
    • Dotnet i terminalen
  • Filhantering
    • Filsökvägar
    • Läsa och skriva
    • Filer och mappar
    • Open, close, using
    • Serialisering […]
      • JSON-serialisering
      • XML-serialisering
    • Resursfiler
    • Filformat
      • JSON
  • Klasser och objektorientering
    • Översikt objektorientering
    • Lathund för klassdesign
    • Klasser och instanser
    • Struct
    • Public, private och protected
    • Klassdiagram
    • Klassmetoder
    • Konstruktorer
    • Arv
    • Komposition
    • Inkapsling och properties
    • Static
    • Polymorfism […]
      • Virtual, override
    • Generiska klasser
    • Abstract
    • Interface
    • Attribut
  • Annat
    • RayLib […]
      • Raylib setup
      • Fönster i Raylib
      • Grundläggande grafik
      • Geometriska former
      • Bilder och texturer
        • Texture
        • Image
      • Input
      • Text
      • Rectangle
      • Kollisioner
      • Kamera
      • Ljud
      • Raylib-CSharp*
    • MonoGame […]
      • Monogame-projekt*
      • MCGB Editor*
      • Input*
      • Grafik*
      • Kollisioner
      • Ljud*
    • Nätverk och internet […]
      • CRUD, HTTP och REST
      • URL:er och REST
      • RESTful client*
      • Thunder
      • RESTful server (Minimal API)
        • Swagger och OpenAPI
      • RESTful server (Web API) […]
        • Controllers
        • Models/dataklasser
        • Tester med RESTer
    • Linq
      • Linq-metoder
      • Linq-queries
    • Databaser
      • SQLite-kommandon
      • SQLite och VSCode
      • C# och SQLite
      • Entity Framework Core
    • Threading
      • Thread
      • Task
    • Pseudokod och diagram
    • Windows UI
      • WPF
      • XAML*
      • WinUI*
  • Mjukvara
    • Dotnet SDK
    • Visual Studio Code […]
      • Extensions
      • Inställningar
      • Debugging
      • Snabbkommandon
      • Snippets
      • Felsökning
    • Git & GitHub […]
      • Git-begrepp
    • Andra verktyg
  • Tekniker
    • Begränsa input
    • Game states
    • Gå igenom en array (eller lista)
    • Länkade listor och andra strukturer
    • Ta bort saker ur listan man går igenom
    • 2D-spelbräden
    • Timers
  • CONTRIBUTING
Powered by GitBook
On this page
  • Objekt
  • Klass
  • Instans
  • Klassvariabler och klassmetoder
  • Arv
  • Komposition
  • Inkapsling
  • Interaktion mellan objekt
  • Polymorfism
  • Generiska klasser

Was this helpful?

  1. Klasser och objektorientering

Översikt objektorientering

PreviousJSONNextLathund för klassdesign

Last updated 1 year ago

Was this helpful?

Objekt

Ett objekt är en samling variabler, metoder och algoritmer som "hör ihop" och motsvarar en "sak" i programmet.

Exempel på objekt: Ett svärd, en fiende, en bok, en bana, ett päron, en kund.

Klass

En klass är en ritning, eller en mall, för en kategori av objekt. En klass är inte i sig ett objekt, utan bara en instruktion för hur ett objekt ska se ut och fungera.

Exempel på klasser: Svärd, fiende, bok, bana, päron, kund.

En klass fungerar också som en datatyp, så varje gång kod förväntar sig en datatyp (t.ex. string eller int) kan man istället skriva dit en klass.

Instans

En instans är ett objekt man skapat utifrån en klass.

Klassvariabler och klassmetoder

En klassvariabel är en variabel som ingår i en klass, och en är en metod som ingår i en klass.

Alla instanser av en klass får tillgång till alla klassens metoder och egen kopia av alla klassens variabler.

Exempel:

class Pear
{
  public int Cost = 100; // <-- klassvariabel
  public bool Eaten = false; // <-- klassvariabel
  
  public void Eat() // <- klassmetod
  {
    eaten = true;
  }
}

Arv

Man brukar också beskriva det som att subklassen är en mer specialiserad version av basklassen – ett exempel på basklass kan vara Weapon och en subklass till Weapon kan då vara Sword. Sedan kan Sword agera basklass till LongSword och ShortSword. Relationen mellan subklass och basklass är att [subklassen] är en sorts [basklassen], så att ShortWord är en sorts Weapon till exempel.

Komposition

Man brukar också beskriva det som att klassernas relation blir en har-en-relation. En hjälte har ett vapen (klassen Hero har en Weapon-variabel som innehåller instanser av den klassen eller dess subklasser).

Inkapsling

Det innebär också att man har så få variabler, properties och metoder som är publika. Man vill visa upp ett så litet "gränssnitt" mot resten av världen som möjligt.

Framför allt bör man, om man jobbar med inkapsling, inte ha några publika variabler. Istället används properties och metoder för att ändra på variablernas värde.

Anledningen till att man gör detta är dels för att skapa en tydlig struktur, dels minska risken att man gör fel när man skriver kod. Om det inte går att ändra på de privata variablerna direkt så kan man heller inte råka t.ex. ge dem ett felaktigt värde.

Interaktion mellan objekt

När två objekt interagerar direkt med varandra, till exempel när data från ett objekt förs över till ett annat, eller när ett objekt stoppas in som parametervärde in i ett annat objekts metod.

Fighter hero = new Fighter();
Fighter opponent = new Fighter();

hero.Attack(opponent);
opponent.Attack(hero);

Polymorfism

Generiska klasser

En klass kan från en annan klass. Det betyder att subklassen får basklassens alla metoder och variabler, men den kan också lägga till egna.

Alla svärd är då vapen, och har alla metoder etc som ingår i vapen – fast de kan ha egna tillägg, och de kan också delvis fungera annorlunda (se ).

Man kan också lägga in instanser av en klass i instanser av en annan klass. Detta kallas .

är principen att varje objekt – varje klass – ska sköta sin egen logik. Det innebär att man samlar all kod som hör ihop med ett objekt inuti metoder i objektets klass.

i objektorientering är när en instans av en subklass lagras i en variabel eller t.ex. en lista vars datatyp är subklassens basklass. Så om man har subklassen Goomba som ärver från Monster, och lagrar en Goomba-instans i en Monster-variabel eller lägger in den i en Monster-lista så använder man polymorfism.

är klasser där datatypen för en eller flera variabler eller metoder inte bestämts, utan avgörs när man skapar en instans av klassen. Ett exempel på färdig generisk klass är List.

ärva
Polymorfism
komposition
Inkapsling
Generiska klasser
klassmetod
Polymorfism
Mer om klasser.
Mer om instanser.