Klasser og OOP i C#
Computerspace · FGU · Programmering i C#
🏗️ Hvad er klasser og OOP i C#?
C# er designet fra bunden til objektorienteret programmering. Alt i C# er et objekt – selv primitive typer som int er en System.Int32.
Klassedefinition med properties:
```csharp
public class Elev {
// Auto-implemented properties
public string Navn { get; set; }
public int Alder { get; private set; } // Kun intern ændring
// Read-only computed property
public bool ErMyndig => Alder >= 18;
// Konstruktør
public Elev(string navn, int alder) {
Navn = navn;
Alder = alder;
}
// Metode
public void Præsentér() {
Console.WriteLine($"Jeg hedder {Navn} og er {Alder} år.");
}
// Override ToString fra object
public override string ToString() => $"Elev: {Navn}";
}
// Brug
var elev = new Elev("Anna", 19);
elev.Præsentér();
Console.WriteLine(elev); // Bruger ToString()
```
Nedarvning:
```csharp
public class Person {
public string Navn { get; set; }
public virtual void Præsentér() => Console.WriteLine($"Person: {Navn}");
}
public class Lærer : Person {
public string Fag { get; set; }
public override void Præsentér() =>
Console.WriteLine($"Lærer {Navn} underviser i {Fag}");
}
// Sealed klasse – kan ikke nedarves
public sealed class AdminBruger : Person { }
```
Adgangsmodifikatorer:
```csharp
public // Tilgængelig overalt
private // Kun i klassen
protected // Klassen og afledte klasser
internal // Kun i samme assembly (.dll)
```
---
🎓 Læringsmål for Klasser og OOP i C#
Læringsmål
- Definere klasser med properties (auto-implemented og computed)
- Forstå adgangsmodifikatorer: public, private, protected, internal
- Implementere nedarvning med virtual, override og sealed
- Bruge polymorfi til at behandle afledte typer som base-typen
- Forstå at alt i C# nedarver fra object
Sådan kan du arbejde med emnet
- Hvad er en property i C# og hvad er forskellen på get og set?
- Hvad er forskellen på public, private og protected?
- Hvad er nedarvning og hvornår bruger man det?
- Hvad betyder virtual og override i C#?
⚠️ Typiske fejl at undgå
- Glemmer new ved oprettelse –
Elev e = new Elev()ikke bareElev e - Direkte feltadgang i stedet for properties – brug properties til indkapsling
- Arver for meget – brug komposition (har-en) frem for arv (er-en) når det giver mening
---
💡 Tips til at komme i gang
- Brug primary constructors (C# 12):
class Elev(string navn, int alder)– endnu kortere - Modellér virkelige objekter – BankKonto, Produkt, Ordre er gode øvelsesprojekter
- Læs om SOLID-principper – de er fundamentet for god OOP i professionel C# kode
Øv dette emne med AI — quizzer, forklaringer og feedback tilpasset dit niveau.
Prøv Fagportalen gratis