[G_PRO] Basis Programmeren en OO Programmeren
DigitAP
  • Welkom
  • Inleiding
    • Benodigdheden
    • Afspraken code
    • Afspraken oefeningen
    • Nuttige extras
    • Dankwoord
    • Mee helpen?
  • Semester 1: Programming Principles
    • H1: Werken met Visual Studio
      • Introductie tot C#
      • Visual Studio en .NET Core installeren
      • Een C# project maken in Visual Studio
      • Fouten in je code
      • Je eerste stappen in C#
      • Input/Output: ReadLine/WriteLine
      • Kleuren in Console
      • Oefeningen
    • H2: Variabelen en datatypes
      • De syntaxis van C#
      • Datatypes
      • Variabelen
      • Expressies en operators
      • Oefeningen
    • H3: Strings en hun methoden
      • Strings
      • Strings samenvoegen
      • Omzetten van en naar strings
      • Functionaliteit van strings
      • Oefeningen
    • H4: Beslissingen
      • Beslissingen intro
      • Enkelvoudige booleaanse expressies
      • If, else, else if
      • Samengestelde booleaanse expressies
      • Scope van variabelen
      • Switch
      • Oefeningen
    • H5: Loops
      • Loops intro
      • While en Do While
      • For
      • Debuggen
      • Oefeningen
    • H6: Arrays
      • Array principes
      • Alternatieve syntax
      • Werken met arrays
      • Defaultwaarden
      • List<T>
      • Oefeningen
    • H7: Methoden
      • Methoden intro
      • Parameters
      • Return waarden
      • Geavanceerde methoden
      • Oefeningen
    • Intermezzo: TextCell
    • H8: Numerieke data
      • De Math klasse
      • Random
      • Casting en conversie
      • Oefeningen
    • H9: Meerdimensionaal werken
      • N-dimensionale arrays
      • Geneste iteratie
      • Oefeningen
    • H10: Gevorderde tekstverwerking
      • Voorstelling van tekst
      • Interpolatie met formattering
      • Werken met arrays van strings
      • Input en output van tekstbestanden
      • Oefeningen
    • Afsluiter: TextCell2D
  • Semester 2 : OOP
    • H10: Klassen en objecten
      • OOP Intro
      • Klassen en objecten aanmaken
      • DateTime: leren werken met objecten
      • Enumeraties: nog een eigen datatype
      • Klassen en objecten weergeven deel 1
      • Attributen
      • Methoden
      • Access modifiers
      • Properties
      • Oefeningen
    • H11: Objecten (al dan niet) aanmaken
      • Constructors
      • Spelen met strings
      • Oefeningen
    • H12: Geheugenmanagement bij klassen
      • value en reference met eigen objecten
      • nullable value types
      • NullReference exception
      • Oefeningen
    • H13: Datastructuren
      • Foreach en var
      • List
      • Dictionary
      • Immutable datastructuren
      • Verdere datastructuren
      • Oefeningen
    • H14: Overerving
      • Overerving intro
      • Virtual en override
      • Abstract
      • Constructors bij overerving
      • Oefeningen
    • H15: Geavanceerde overerving
      • protected access modifier
      • Base keyword
      • System.Object
      • Oefeningen
    • H16: Exception handling
      • Werken met exceptions
      • Zelf uitzonderingen maken
      • Wanneer exceptions en handling gebruiken
      • Oefeningen
    • H17: Polymorfisme en interfaces
      • Polymorfisme
      • Polymorfisme in de praktijk
      • Interfaces
      • Losse koppeling
      • Oefeningen
    • H18: Testing
      • Intro Testing
      • Wat is Unit Testing
      • Waarom Unit Testing?
      • Wanneer Unit Testing?
      • Schrijven van een unit test: AAA methode
      • Eerste voorbeeld: Sum
      • Assert
      • Oefening even of oneven getal
      • TestInitialize en DataRows
      • Oefening BMI
      • Exception testing
      • Oefening BMI exception
      • Oefening SchoolAdmin test null-waarden en TestCleanup
      • Oefening SchoolAdmin test equals
      • Oefening SchoolAdmin test cursus zoeken met id
      • Dependencies bij Unit Testing
      • Mocking
      • Oefeningen Mocking
      • Test Driven Development
      • Class Library
      • Oefeningen TDD
    • H19: SOLID
      • Single Responsibility Principle (SRP)
      • Open/Closed Principle (OCP)
      • Liskov Substitution Principle (LSP)
      • Interface Segregation Principle (ISP)
      • Dependency Inversion Principle (DIP)
  • Appendix
    • Visual Studio Tips & Tricks
    • Ea-ict coding guidelines
    • Oefeningen kerkhof
  • Semester 1 appendix
    • Nice to know stuff
      • Out en Ref parameters
      • Jagged arrays
    • All-In-Projecten
      • Overzicht
      • Console Matrix
      • Ascii filmpjes maken met loops
      • Ascii filmpjes maken met methoden
      • Fun with methods: een verhaalgenerator
      • Tekst-gebaseerd Maze game
      • Conway game of life
  • Semester 2 appendix
    • Operator overloading
    • Object Initializer Syntax
    • Compositie en aggregatie
    • Nice to know stuff
      • Klassen herbruiken
      • Expression bodied members
    • All-In-Projecten
      • Overzicht
      • OO Textbased Game
      • War Simulator
      • Map Maker
      • Magic The Gathering API
      • SchoolAdmin
  • Pro (geen leerstof en/of in opbouw)
    • Bitwise operators
    • Generics en collections
      • Generics methoden en types
      • Generic classes en constraints
      • Collections
      • Labo-oefeningen
    • Events
      • Events
      • Chat server
    • Software engineering
      • SOLID
Powered by GitBook
On this page
  • Betekenis van null
  • Operaties met null
  • H12_1 SchoolAdmin nullable Resultaat
Export as PDF
  1. Semester 2 : OOP
  2. H12: Geheugenmanagement bij klassen

nullable value types

Previousvalue en reference met eigen objectenNextNullReference exception

Last updated 1 year ago

Betekenis van null

Normaal gezien kom je null tegen wanneer je een variabele van een reference type hebt zonder verwijzing naar data. Het gevolg is dat null vaak betekent dat er een waarde zou kunnen staan, maar in de huidige situatie geen geldige waarde is.

Hoewel value types niet werken met verwijzingen, zou dezelfde interpretatie ook bij value types zinvol kunnen zijn: soms heb je gewoonweg geen geldige waarde. Daarom kent C# ook nullable value types. Dit zijn speciale value types die ook de waarde null kunnen aannemen (ook al kom je die laatste anders vooral tegen bij reference types).

Je noteert een nullable value type als een gewoon value type, gevolgd door een vraagteken. Indien je in code bijvoorbeeld een getalwaarde wil voorstellen als een variabele int mijnVariabele, maar de mogelijkheid bestaat dat er geen waarde is voor mijnVariabele, declareer je als volgt: int? mijnVariabele. Dit betekent: "mijnVariabele is een getal, maar kan ontbreken."

Dit heeft gevolgen. Je kan code die een value type verwacht niet zomaar gebruiken met een nullable versie van hetzelfde type. Anders gezegd: je mag mijnVariabele niet meegeven aan een methode die een gewone int verwacht. Je moet ofwel deze methode aanpassen zodat ze een int? verwacht, ofwel moet je mijnVariabele casten voor je hem meegeeft als argument. Let op: dit werkt alleen als mijnVariabele niet null is!

Operaties met null

Voor de nullable versies van de value types die je al kent, kan je gekende operaties (zoals +, -, ... voor getallen) blijven gebruiken, maar je moet opletten. Een berekening met null in levert je sowieso null op als resultaat. Een vergelijking (via <=, <, >, >=) met null levert je sowieso false op als resultaat.

H12_1 SchoolAdmin nullable Resultaat

Tot nu kan een student zich enkel inschrijven voor een cursus als er een cursusresultaat is. We gaan ervoor zorgen dat null kan ingegeven worden als resultaat.

Hernoem eerst de klasse CourseResultnaar de meer geschikte naam CourseRegistration(verander de naam van het bestand en antwoord 'yes' op de vraag om in heel het project de naam te wijzigen).

Doe ook een Rename van de list courseResultsnaar courseRegistrations in de klasse Student.

Geef in de methode DemoStudents, null in als resultaat bij student said voor Programmeren.

Je ziet dat er een byte verwacht wordt. Ga naar de definitie van de methode RegisterCourseResulten verander byte in byte? .

Er komt nu een foutmelding bij het maken van de instantie van een CourseRegistration. Ga naar de definitie van de constructor van CourseRegistrationen maak de parameter result byte? .

Nu geeft de property Resultproblemen. Maak daarop Result nullable. Indien value null is, geeft de vergelijking problemen. Voeg een extra controle toe.

Als je de toepassing uitvoert, komt er een foutmelding van de methode Averageuit Student. Een nullable byte moet je expliciet converteren naar een double. Om zeker te zijn dat bij de optelling Result geen null is, voeg je nog een controle toe.

Als je de toepassing nog eens uitvoert, zie je dat het gemiddelde verkeerd berekend wordt. Doe de nodige aanpassingen om een correct gemiddelde te verkrijgen.

Voorbeeldinteractie