Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat).
Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: “String” , “int “ , “Bool”, “char” en “double”. string: Een string bestaat (meestal) uit een groep characters (letters of cijfers) Voorbeeld declaratie van een string : string adres ; En als je er meteen een waarde aan mee wil geven: string adres = “baklaanstraathof”; De inhoud van een string staat bij een declaratie dus altijd tussen “ “ ! int: Een int is een afkorting van integer. Een int is een variabele wat als waarde ALTIJD een geheel getal is. Het getal kan negatief of positief zijn. Maar dus GEEN decimalen. Voorbeeld declaratie van een int : int huisnummer ; En als je er meteen een waarde aan mee wil geven: int huisnummer = 22; De inhoud van een int staat dus nooit tussen “ “ of ‘ ‘ ! bool: Een bool is een afkorting van Boolean. Een bool is een variabele wat als waarde alleen true of false kan hebben. Voorbeeld declaratie van een bool : bool tuin ; En als je er meteen een waarde aan mee wil geven: bool tuin = true; De inhoud van een bool staat dus nooit tussen “ “ of ‘ ‘ , en kan als waarde alleen TRUE of FALSE hebben.
double: . Een double is een variabele wat net zoals een int ALTIJD een getal is. Maar het verschil is dat een double decimalen kan hebben. Voorbeeld declaratie van een double : double waardevanhuis ; En als je er meteen een waarde aan mee wil geven: double waardevanhuis = 1500.654; De inhoud van een double staat dus nooit tussen “ “ of ‘ ‘ , en heeft als waarde ALTIJD een getal, met of zonder decimalen. char : Een char is een variabele wat als waarde maar 1 tekenheeft. Dit kan dus of één letter zjin, of één cijfer of één leesteken ( bijvoorbeeld een spatie). Voorbeeld declaratie van een char : char lokaal ; En als je er meteen een waarde aan mee wil geven: char waardevanhuis = ‘G’; De inhoud van een char staat ALTIJD tussen ‘ ‘ , en heeft als waarde ALTIJD maar 1 teken.
Functies Het is aan te raden om je programma op te delen in functies. Een functie kan een waarde terug geven. Maar een functie kan ook alleen maar iets uitvoeren en niks teruggeven. Aan een functie kan je ook parameters meegeven, dit geef je tussen de haakjes aan. Voorbeeld 1 : een functie die een int‐waarde terug geeft , en met 2 parameters public int berekening(int getal1, int getal2) { return getal1 + getal2; } Met het woord return geef je een bepaalde waarde terug. Hetgene wat je “terugstuurt” MOET van het (data)type zijn wat je bij de functie had aangegeven(in bovenstaand voorbeeld dus een int).
Data modifiers Aan een variabele of functie/method (voor uitleg zie verder) of een klasse (class) . Kan je een bepaalde “Bescherming” meegeven. Hiermee geef je aan of datgene benadert kan worden vanuit een andere klasse. Voorbeelden zijn: public Dit betekent dat de functie of variabele volledig public is, en te benaderen en te wijzigen is vanuit een andere klasse. private Dit houd in dat de variabele of de functie alleen benadert kan worden binnen de eigen klasse of een child‐klasse (overgeërfd) protected Dit houd in dat de variabele of de functie alleen benadert kan worden binnen de eigen klasse ,en dus NIET door een child(overgeërfde) – klasse.
Object Georiënteerd Programmeren (OOP) Wat is een Klassse? (Class) Een klasse is een soort bouwtekening. Als voorbeeld nemen we een auto. Een bouwtekening bevat verschillende informatie (fields) over hoe een auto is opgebouwd, zoals kleur , en het aantal deuren . Voorbeeld: class Auto { public string kleur; public int aantaldeuren; } Wat is een Method? Als je het over een klasse “Auto” hebt, dan kan deze klasse ook “Methods” bevatten. Een auto kan je starten, de deuren kunnen open, je kan de lichten aandoen. In OOP noem je dit “Methods” . Een method is dus eigenlijk een functie binnen een klasse. Voorbeeld: class Auto { public string kleur; public int aantaldeuren; public void StartAuto() { //Code om de auto te starten. } } Wat is een Object? Een object is iets wat je aanmaakt door middel van de klasse .Je kan dus heel veel objecten maken van 1 klassse. Dus in dit geval, kan je meerdere auto’s maken van 1 klasse(Bouwtekening). Net zoals als je van 1 bouwtekening meerdere auto’s kan maken. Maar niet elk object heeft dezelfde eigenschappen, zo heeft niet elke auto dezelfde kleur, en hetzelfde aantal deuren, maar dan kunnen ze nog wel van hetzelfde type (= Klasse) zijn. Hoe maak je een nieuw object aan in C#? Door middel van het woordje “new” kan je een nieuw object aanmaken, de opbouw is als volgt:
= new (); In ons voorbeeld zou het dus als volgt zijn: Auto auto1 = new Auto(); Dit kan je zovaak doen als je wilt. Alleen uiteraard moet je dan wel zorgen dat de naam van het object elke keer anders is (auto1, auto2, auto3) .
Constructors Het zou makkelijk zijn als je aan een bepaald object meteen waardes mee kon geven (Dus meteen eigenschappen van een auto aan een nieuwe auto meegeven). Hiervoor is een zogenaamde Constructor nodig. Een constructor kan je zien als een stuk code wat meteen word uitgevoerd zodra een object word aangemaakt. Een constructor komt BINNEN de de klasse. Dus in dit geval binnen de klasse Auto. De constructor is ALTIJD public, en MOET dezelfde naam hebben als de klasse. Voorbeeld: class Auto { public string kleur; public int aantaldeuren; public Auto (string kl, int aantald) { kleur = kl; aantaldeuren = aantald; } public void StartAuto() { //Code om de auto te starten. } } Als je een constructor binnen een klasse hebt, en je gaat dan een object aanmaken(een nieuwe auto in ons geval) , dan kan je meteen die bepaalde eigenschappen meegeven: Auto auto1 = new Auto(“rood”, 4); LET HIER OOK OP OF DE BEPAALDE WAARDE TUSSEN “ “ of ‘ ‘ MOET OF NIET! Hiermee heb ik dus een nieuw object(nieuwe auto) aangemaakt, die als kleur rood heeft, en 4 deuren heeft.
Encapsulation Encapsulation is als je dat vertaalt naar het nederlands: “Inkapseling” . Je gaat dan vaak de fields(kleur, aantaldeuren) als private declareren en je maakt dan binnen de klasse één method aan om de inhoud van een field(kleur bv) te krijgen(getter) en één method om het field in te vullen(setter). Deze Methods moeten WEL public zijn! Door encapsulation zal de hoeveelheid code dus groter worden, maar de fields zijn beter beschermd. Een voorbeeld zal het duidelijker maken: class Auto { private string kleur; private int aantaldeuren; public string GetKleur() { return kleur; } public void SetKleur(string kl) { Kleur = kl; } } Dus als ik nu een nieuw object(auto) wil aanmaken en ik wil de kleur opgeven, dan doe ik dat zo: Auto auto1 = new Auto(); auto1.SetKleur(“Groen”); En als ik nu de kleur van auto1 wil uitlezen , doe je dat zo: Console.WriteLine(auto1.GetKleur()); Het bovenstaande gedeelte heeft alleen als nadeel dat je de waardes niet meer op de volgende manier kan benaderen: Console.WriteLine(auto1.Kleur); of auto1.Kleur = “Groen”; Daarom is het beter om Properties te gebruiken.
Properties In een property kan je eigenlijk de “getter” en de “setter” in 1 stukje code zetten. Dus als ik een property wil aanmaken voor “Kleur” doe ik dat zo: LET OP: Zorg dat de Property in HOOFDLETTERS staat, dus in dit geval KLEUR. class Auto{ private string kleur; private int aantaldeuren; public string KLEUR { get { return kleur; } set { kleur = value; } } } Nu kunnen we op de volgende manieren, de waardes uitlezen en invullen: Auto auto1 = new Auto(); //Uiteraard eerst het object aanmaken auto1.KLEUR = “Geel”; // Hiermee zet ik de kleur van auto1 op Geel Console.WriteLine(auto1.KLEUR); // Hiermee lees ik de kleur uit van auto1 Nu, zijn de fields normaal uit te lezen, maar toch via encapsulatie beschermt! Uiteraard moet je voor elk field een aparte property aanmaken, dus als ik het field aantaldeuren ook erbij wilt doen, doe ik dat zo:
class Auto{ private string kleur; private int aantaldeuren; public string KLEUR { get { return kleur; } set { kleur = value; } } public int AANTALDEUREN { get { return aantaldeuren; } set { aantaldeuren = value; } } } Auto auto1 = new Auto(); //Uiteraard eerst het object aanmaken auto1.KLEUR = “Geel”; // Hiermee zet ik de kleur van auto1 op Geel auto1.AANTALDEUREN = 5; // Hiermee zet ik de kleur van auto1 op Geel Console.WriteLine(“De kleur van auto1 is : “ + auto1.KLEUR + “Aantal deuren: “ + auto1.AANTALDEUREN);
Begrippen OOP De 3 “pilaren” van OOP: ‐Encapsulation ‐Inheritance ‐Polymorphism
Encapsulation Encapsulation betekent inkapseling. Met encapsulation zijn de fields beschermd(private), maar door public methods kunnen de fields toch (via‐via) benadert worden. Inheritance Inheritance is makkelijk om om een klasse uit te breiden. Hiermee maak je een nieuwe klasse, die gebaseerd is op een andere klasse. De nieuwe klasse word de “child‐klasse” genoemd, en waar de oude word de “base‐klasse” genoemd. Bijvoorbeeld als je een auto hebt(Base‐klasse) . En dan een nieuwe auto wilt maken die hetzelfde is als de oude, alleen met extra functionaliteiten. De nieuwe auto is dan dus een Child‐klasse. Polymorphism Polymorphism is: de mogelijkheid om methods en properties uit base klassen onder dezelfde naam her te gebruiken in een child‐klasse. De method is dan in de base‐klasse met het woord “virtual” gedefinieerd. En in de andere (child)‐klasse, waar je de method wilt hergebruiken, word het woord “override” gebruikt. Abstract Classes Een abstracte klasse is te herkennen aan het woord “abstract” . In een abstracte klassen kan je abstracte methods hebben. Deze zijn dan niet uitgeschreven, maar alleen gedefinieerd in de base‐klasse. In de child‐klasse worden de method dan verder uitgeschreven. Overig: ‐ Het is WEL mogelijk om fields en methods door te geven aan andere klasses (overerven) , maar het is NIET mogelijk om constructors door te geven. ELKE klasse moet dus zijn eigen constructor hebben.
Interface Een klasse kan niet overerven van meerdere base‐klasses. In een interface staan alleen abstracte methods. Interfaces maken het mogelijk om methodes uit verschillende klasses te benaderen . Method Overloading Method overloading kan gebruikt worden, om 2 methods met dezelfde naam , maar met verschillende parameters te gebruiken. Static Fields Met behulp van static fields kan je fields aanmaken, die standaard beschikbaar zijn bij alle klasses. Hiervoor hoeft géén object aangemaakt te worden. De static fields zijn dan te benaderen met de naam van de class + de naam van het static field. Dus: class Klant { public static count = 10; } class Test { public static void Main() { Console .WriteLine(Klant.count); } }// Einde test