Hjem » Siste artikler » Klasser i C#: en enkel guide til å strukturere større prosjekter ryddig

Klasser i C#: en enkel guide til å strukturere større prosjekter ryddig

Hovedillustrasjon
Hovedillustrasjon. Foto: Daniil Komov / Pexels.

Mange starter med små C#-programmer der alt ligger i én fil. Det fungerer en stund, men blir fort uoversiktlig når prosjektet vokser, flere jobber på samme kodebase eller du vil gjenbruke logikk senere.

Klasser er nøkkelverktøyet for å rydde opp. De gir struktur, forenkler vedlikehold og gjør det lettere å bygge videre uten å miste kontrollen. Her får du en jordnær innføring, med fokus på hvordan du faktisk kan bruke klasser i hverdagskode.

Hva er en klasse i C#, egentlig?

En klasse er en mal for noe som hører sammen: data og funksjoner som jobber med disse dataene. Du kan se på det som en egen “modul” med tydelig ansvar, i stedet for løse variabler og funksjoner spredt rundt.

Når du “lager” noe ut fra en klasse, kalles det et objekt. Klassen beskriver hva et slikt objekt kan gjøre og hvilken informasjon det har, mens objektet er den konkrete forekomsten i minnet.

Et konkret eksempel: en enkel kunde

La oss si at du lager et lite ordresystem. I stedet for å ha separate variabler for navn, e‑post og telefon overalt, kan du samle dem i en klasse:

Eksempel:

public class Kunde
{
public string Fornavn;
public string Etternavn;
public string Epost;
}

// Bruk:
var kunde = new Kunde();
kunde.Fornavn = "Anna";
kunde.Etternavn = "Hansen";
kunde.Epost = "[email protected]";

Dette er den enkleste formen: en klasse med felt. Allerede her blir det lettere å sende kundeinformasjon mellom metoder, lagre lister med kunder og holde oversikt.

Fra felt til egenskaper: tryggere struktur

Offentlige felt som over fungerer, men gir deg lite kontroll. Vanlig praksis i C# er å bruke egenskaper (properties) for å kunne legge inn regler senere uten å endre resten av programmet.

Forbedret versjon:

public class Kunde
{
public string Fornavn { get; set; }
public string Etternavn { get; set; }
public string Epost { get; set; }
}

Utvendig ser bruken lik ut, men nå kan du når som helst legge til validering eller ekstra logikk i get og set uten å endre alle som bruker klassen.

Konstruktør: sørg for gyldig starttilstand

En vanlig utfordring er “halve” objekter, for eksempel en kunde uten e‑post fordi noen glemte å sette den. En konstruktør lar deg kreve det som er nødvendig for å opprette objektet.

Eksempel med konstruktør:

public class Kunde
{
public string Fornavn { get; }
public string Etternavn { get; }
public string Epost { get; }

public Kunde(string fornavn, string etternavn, string epost)
{
if (string.IsNullOrWhiteSpace(epost))
{
throw new ArgumentException("E-post kan ikke være tom.", nameof(epost));
}

Fornavn = fornavn;
Etternavn = etternavn;
Epost = epost;
}
}

Nå kan ikke noen lage en kunde uten e‑post, og du samler reglene der de hører hjemme, inne i klassen.

Metoder: la klassen gjøre jobben selv

Tematisk illustrasjon
Tematisk illustrasjon. Foto: Pixabay / Pexels.

En klasse blir først virkelig nyttig når den også har metoder, ikke bare data. En tommelfingerregel er at logikk som handler om kunden, bør ligge i Kunde-klassen og ikke spres rundt i resten av programmet.

Eksempel:

public class Kunde
{
public string Fornavn { get; }
public string Etternavn { get; }
public string Epost { get; }

public Kunde(string fornavn, string etternavn, string epost)
{
// som over
Fornavn = fornavn;
Etternavn = etternavn;
Epost = epost;
}

public string HentFulltNavn()
{
return $"{Fornavn} {Etternavn}";
}
}

I stedet for å sette sammen navn overalt der kunden brukes, ber du objektet selv om fullnavnet. Det gir mer lesbar og mindre feilutsatt struktur.

Synlighet: public, private og “innpakning”

Synlighetsnivåer styrer hvem som kan se hva. Det viktigste skillet for nye utviklere er mellompublicogprivate. Public er tilgjengelig utenfra, private er kun tilgjengelig inne i klassen.

Mål:Vis minst mulig utad, så får du færre steder å endre når du utvikler videre. Det gjør endringer tryggere og reduserer risiko for uønsket bruk av interne detaljer.

Eksempel med privat felt:

public class Ordre
{
private readonly List<string> _ordrelinjer = new List<string>();

public void LeggTilVare(string varenavn)
{
if (string.IsNullOrWhiteSpace(varenavn)) return;
_ordrelinjer.Add(varenavn);
}

public IReadOnlyList<string> HentOrdrelinjer()
{
return _ordrelinjer.AsReadOnly();
}
}

Andre deler av programmet kan ikke rote direkte i listen, men må bruke metodene som du kontrollerer. Da kan du legge til regler uten å jakte overalt i prosjektet.

Navn og ansvar: slik unngår du “gudeklasser”

En klassisk felle er å lage én gigantisk klasse som gjør alt. Den er rask å starte med, men vanskelig å teste, feilsøke og endre etter hvert. En bedre tilnærming er å gi hver klasse et tydelig og smalt ansvar.

Noen enkle rettesnorer:

  • Gi klassen et navn som beskriver én ting, for eksempelKunde,Ordre,EmailSender.
  • Hvis navnet ditt får ord som “Manager”, “Helper” eller “Util” uten en klar grunn, stopp opp og tenk gjennom ansvaret.
  • Hvis du må forklare klassen med mer enn én kort setning, vurder å dele den opp i flere.

En enkel måte å organisere flere klasser på

Når du får mange klasser, er mapper og namespaces i C# gull verdt. Plasser for eksempel alt som har med kunder å gjøre i en mappe kalt “Kunder”, og bruk samme navn i namespace.

Eksempel:

namespace MittProsjekt.Kunder
{
public class Kunde { /* ... */ }

public class KundeValidering { /* ... */ }
}

Det gjør det enklere å finne frem, importere riktige klasser og forstå strukturen for både deg selv og andre som kommer inn i prosjektet senere.

Hvordan komme i gang i ditt neste prosjekt

Når du starter på noe nytt, kan du bruke dette som startoppskrift:

  1. Identifiser 2 til 5 “ting” i domenet ditt, for eksempel Kunde, Ordre, Produkt, Betaling.
  2. Lag én klasse per ting, med tydelige egenskaper og en enkel konstruktør.
  3. Flytt logikk som naturlig hører til disse tingene, inn i klassene som metoder.
  4. Skjul interne detaljer med private der du kan, og eksponer kun det som faktisk trengs.

Begynn enkelt, og ikke vær redd for å endre klassene etter hvert. God struktur kommer sjelden perfekt på første forsøk, men små bevisste grep tidlig gjør det langt lettere å vokse videre uten å miste oversikten.

0 kommentarer