
Programmeren 1
Structs en value types vs. reference types
Doelstelling
We werken verder met structs. We onderzoeken ook het gedrag van structs als value types en vergelijken dit met het gedrag van reference types.
Leerpad
Lees aandachtig volgende delen van het Yellow Book.
- 4.3 Structs: volledig
- 4.4 (alles behalve 4.4.3)
Oefeningen
-
Werk de recentste oefening uit de les af. De opgave was als volgt:
- Schrijf (als deel van OefeningenStructs.cs) een struct
Student
met twee veldenName
enAddress
. Kies zelf geschikte datatypes. - Schrijf vervolgens een struct
Course
met drie velden:Title
,Hours
enStudents
. Kies zelf geschikte datatypes. - Schrijf vervolgens een methode
DemonstrateStudentsAndCourses
. Deze maakt een array vanCourse
s aan met daarin eenCourse
aan met titel "Programmeren 1", 120 lestijden en een array met daarin twee studenten en eenCourse
met titel "Datacommunicatie en netwerken", 60 lestijden en een array met daarin drie studenten. Let op: je arrays moeten dan wel maar 2 en 3 studenten bevatten, maar ze moeten groot genoeg zijn om telkens 50 studenten te bevatten. - Breid
DemonstrateStudentsAndCourses
uit om de namen van alle studenten die ingeschreven zijn in een cursus af te printen. - Breid je Program.cs uit om deze methode op te roepen en te tonen dat ze werkt.
- Kijk naar de vorige oefening rond
ARPEntry
als je niet meer weet hoe je een array moet doorlopen wanneer de lengte niet vastligt. - Als je ergens een nullreferentie tegenkomt, betekent dat waarschijnlijk dat je de arrays van studenten niet juist hebt geïnitialiseerd. Kijk naar eerdere voorbeelden waarin een nieuwe array wordt toegekend aan een variabele als je niet zeker bent hoe je dit moet doen.
- Schrijf (als deel van OefeningenStructs.cs) een struct
-
Opgelet! Deze oefening zal je alléén kunnen oplossen als je de stof in het Yellow Book hebt bestudeerd. Doe dat dus eerst, indien je dat nog niet hebt gedaan.
- Schrijf een struct
Database
met drie velden: een veldName
van typeString
, een veldCounter
van typeint
en een veldEntries
van typestring[]
. - Schrijf een methode
UpdateDatabase(Database db)
. Deze heeft return typevoid
, krijgt een database mee als parameter en past de database aan als volgt: ze zet de waardedb.Entries[db.Counter]
op "een database entry" en verhoogt de counter vandb
met 1. - Schrijf een methode
DemonstreerDatabase()
. Deze heeft ook return typevoid
. Ze maakt een database aan met de naam "mijnDB", counterwaarde 0 en een array waarin vijf strings passen voorEntries
. Daarna roept ze vijf keerUpdateDatabase
op met deze nieuw aangemaakte database. - Ten slotte print
DemonstreerDatabase()
de counter en de inhoud van het veldEntries
van deze databank, die we voor het gemak evendb
noemen. Om de inhoud van de databank te printen kan je niet rechtstreeksConsole.WriteLine(db.Entries)
schrijven, maar moet je elke waarde vandb.Entries
apart printen. Dit doe je met een lus. - Test deze laatste methode uit via Program.cs
- Wat wordt er uiteindelijk geprint? Schrijf een verklaring neer in woorden. Als je geen verklaring kan geven, schrijf je stap voor stap neer wat je denkt dat er gebeurt.
- Tip: wat je ziet, heeft te maken met value types en reference types. Value types zijn datatypes die gekopieerd worden wanneer je ze als argument van een methode gebruikt. Reference types zijn datatypes waarvan dan geen kopie wordt gemaakt.
- Hou je verklaring bij en breng ze mee naar de volgende les.
- Schrijf een struct
-
In deze oefening zal je een versie maken van
UpdateDatabase
die wel doet wat je zou verwachten. Doe dit als volgt:- Schrijf een methode
UpdateDatabase2(Database db)
met return typeDatabase
. Deze doet hetzelfde alsUpdateDatabase
, maar bevat als laatste instructie eenreturn
die het ingevoerde argument (als je deze term niet kent, lees dan: "parameter") teruggeeft. - Schrijf een methode
DemonstreerDatabase2()
met return typevoid
. Deze doet hetzelfde alsDemonstreerDatabase
, maar kent het resultaat vanUpdateDatabase2
na elke oproep vanUpdateDatabase2
terug toe aan de variabele die je als argument hebt meegegeven. - Test ook deze methode via Program.cs
- Verklaar ook wat je hier ziet.
- Breng je verklaring ook hier mee naar de volgende les.
- Schrijf een methode
2018-12-13