13Ontwerp- en codechecklist, compileerfouten
#Klassendiagram
- Alle klassen en interfaces uit de probleembeschrijving staan erin
- Zichtbaarheid (+ - #) en types bij álles, ook
void «abstract»/ cursief en«interface»aangegeven- Abstracte methodes cursief
- Pijlen: driehoek naar ouder/interface, doorgetrokken vs gestippeld
- Multipliciteit aan beide kanten van associaties
- Constructors met parameters
- Geërfde leden niet herhaald (alleen overrides)
- Exception-klasse + waar die gegooid wordt
- Pattern zichtbaar (bv. Singleton:
-constructor, static onderstreept) - Diagram klopt met de code (namen, types)
#Code
- Elke klasse/interface in een eigen bestand, juiste
namespace - Velden
private, properties met juiste get/set - Validatie in setters/constructor met juiste exception +
nameof : base(...)in elke subklasse-constructoroverridebij abstracte methodes enToString()decimal+m-suffix voor geld, geen magic numbers (const)- Geen dubbele code (gedeelde basisklasse)
- Afhankelijkheden via interface (logger)
- Belangrijke gebeurtenissen en fouten gelogd
Program.csdemonstreert elke functionaliteit met duidelijke uitvoer- Project bouwt zonder fouten en waarschuwingen
#Veelvoorkomende compileerfouten
| Fout | Oorzaak → oplossing |
|---|---|
| CS0534 | "does not implement inherited abstract member": abstracte methode niet overridden → public override ... toevoegen |
| CS0535 | "does not implement interface member": interface-lid ontbreekt of is niet public |
| CS0115 | "no suitable method found to override": ouder-methode niet virtual/abstract, of andere signatuur |
| CS0144 | "cannot create an instance of the abstract type": new op abstracte klasse |
| CS7036 | "no argument given that corresponds to the required parameter": : base(...) vergeten |
| CS0122 | "inaccessible due to its protection level": lid is private/protected |
| CS0200 | "property is read only": property heeft geen (bereikbare) set |
| CS0266 | "cannot implicitly convert": downcast zonder cast → is/as/(Type) |
| CS0664 | double-literal naar decimal → 0.25m |
| CS0019 | operator op decimal en double → één type gebruiken |
| CS0161 | "not all code paths return a value": return of throw ontbreekt |
| CS0246 | "type could not be found": klasse in andere namespace → using DeelMobiel; |
#Runtime-fouten
NullReferenceException | object niet aangemaakt (lijst niet = new()?) |
InvalidCastException | harde downcast naar verkeerd type |
ArgumentOutOfRangeException bij index | lijst[i] met i ≥ Count |