C# Klassen Beheersen: Blauwprint voor Krachtig Objectgeoriënteerd Programmeren
Een klasse definieert een blauwprint voor een datatype. Het definieert wat de klassenaam betekent: waaruit een object bestaat en welke operaties mogelijk zijn. Objecten zijn instanties van een klasse. Methodes en variabelen heten leden.
Een Klasse Definiëren
Algemene vorm:
<toegangsspecificatie> class klasse_naam {
// lidvariabelen
<toegangsspecificatie> <datatype> variabele1;
...
// lidmethodes
<toegangsspecificatie> <retourtype> methode1(parameterlijst) { ... }
...
}
Let op:
- Standaard toegangsspecificatie voor klasse:
internal; voor leden:private. - Leden benaderen via de puntoperator
..
Voorbeeld: Eenvoudige Box-klasse
using System;
namespace DoosApplicatie {
class Doos {
public double lengte;
public double breedte;
public double hoogte;
}
class DoosTester {
static void Main(string[] args) {
Doos Doos1 = new Doos();
Doos Doos2 = new Doos();
double volume = 0.0;
Doos1.hoogte = 5.0; Doos1.lengte = 6.0; Doos1.breedte = 7.0;
Doos2.hoogte = 10.0; Doos2.lengte = 12.0; Doos2.breedte = 13.0;
volume = Doos1.hoogte * Doos1.lengte * Doos1.breedte;
Console.WriteLine("Volume Doos1: {0}", volume);
volume = Doos2.hoogte * Doos2.lengte * Doos2.breedte;
Console.WriteLine("Volume Doos2: {0}", volume);
Console.ReadKey();
}
}
}
Uitvoer: Volume Doos1: 210, Volume Doos2: 1560
Lidfuncties en Encapsulatie
Lidfuncties zijn gedefinieerd binnen de klasse. Lidvariabelen (attributen) worden private gehouden voor encapsulatie; toegang via publieke methodes.
Voorbeeld: Setters/Getters
using System;
namespace DoosApplicatie {
class Doos {
private double lengte, breedte, hoogte;
public void StelLengteIn(double len) { lengte = len; }
public void StelBreedteIn(double bre) { breedte = bre; }
public void StelHoogteIn(double hei) { hoogte = hei; }
public double KrijgVolume() { return lengte * breedte * hoogte; }
}
class DoosTester {
static void Main(string[] args) {
Doos Doos1 = new Doos(), Doos2 = new Doos();
double volume;
Doos1.StelLengteIn(6.0); Doos1.StelBreedteIn(7.0); Doos1.StelHoogteIn(5.0);
Doos2.StelLengteIn(12.0); Doos2.StelBreedteIn(13.0); Doos2.StelHoogteIn(10.0);
volume = Doos1.KrijgVolume();
Console.WriteLine("Volume Doos1: {0}", volume);
volume = Doos2.KrijgVolume();
Console.WriteLine("Volume Doos2: {0}", volume);
Console.ReadKey();
}
}
}
C# Constructors
Een constructor is een speciale lidfunctie die uitgevoerd wordt bij objectcreatie. Heeft dezelfde naam als de klasse, geen retourtype.
Voorbeeld: Default Constructor
using System;
namespace LijnApplicatie {
class Lijn {
private double lengte;
public Lijn() { Console.WriteLine("Object wordt aangemaakt"); }
public void StelLengteIn(double len) { lengte = len; }
public double KrijgLengte() { return lengte; }
static void Main(string[] args) {
Lijn lijn = new Lijn();
lijn.StelLengteIn(6.0);
Console.WriteLine("Lengte van lijn: {0}", lijn.KrijgLengte());
Console.ReadKey();
}
}
}
Uitvoer: Object wordt aangemaakt, Lengte van lijn: 6
Parameterized Constructor
public Lijn(double len) {
Console.WriteLine("Object wordt aangemaakt, lengte = {0}", len);
lengte = len;
}
Gebruik: Lijn lijn = new Lijn(10.0);
C# Destructors
Een destructor (~KlasseNaam) wordt uitgevoerd wanneer een object out-of-scope gaat. Geen parameters, geen retourwaarde. Nuttig voor vrijgeven resources. Kan niet geërfd of overloaded worden.
Voorbeeld
using System;
namespace LijnApplicatie {
class Lijn {
private double lengte;
public Lijn() { Console.WriteLine("Object wordt aangemaakt"); }
~Lijn() { Console.WriteLine("Object wordt verwijderd"); }
public void StelLengteIn(double len) { lengte = len; }
public double KrijgLengte() { return lengte; }
static void Main(string[] args) {
Lijn lijn = new Lijn();
lijn.StelLengteIn(6.0);
Console.WriteLine("Lengte van lijn: {0}", lijn.KrijgLengte());
}
}
}
Uitvoer: Object wordt aangemaakt, Lengte van lijn: 6, Object wordt verwijderd
Statische Leden van een C# Klasse
Met static keyword: slechts één kopie per klasse, ongeacht aantal instanties.
Voorbeeld: Statische Variabele
using System;
namespace StatischVarApplicatie {
class StatischVar {
public static int num;
public void Tel() { num++; }
public int KrijgNum() { return num; }
}
class StatischTester {
static void Main(string[] args) {
StatischVar s1 = new StatischVar(), s2 = new StatischVar();
s1.Tel(); s1.Tel(); s1.Tel();
s2.Tel(); s2.Tel(); s2.Tel();
Console.WriteLine("Variabele num voor s1: {0}", s1.KrijgNum()); // 6
Console.WriteLine("Variabele num voor s2: {0}", s2.KrijgNum()); // 6
Console.ReadKey();
}
}
}
Voorbeeld: Statische Functie
public static int KrijgNum() { return num; }
// Aanroep: StatischVar.KrijgNum() zonder instantie
C Taal
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C# Access Modifiers: Public, Private, Protected, Internal en Meer
- C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
- C# Abstract Classes & Methods: Een Praktische Gids
- C# Geneste Classes: Definitie, Gebruik en Inheritance
- C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
- C-opslagklassen: Scope, levensduur en gebruik
- Storage Classes in C++ Begrijpen: Scope, Levensduur en Gebruik
- C++ Interfaces: Abstracte Klassen & Pure Virtual Functions Beheersen
- C# Programma Structuur: Kerncomponenten & Hello World Voorbeeld
- C# Fundamentals: Basis Syntaxis & OOP Concepten