CSharp

C# (uitgesproken als “C sharp”) is een programmeertaal dat door Microsoft werd ontwikkeld als tegenhanger van Java. Microsoft wilde een eigen tegenhanger van Java hebben zodat ze meer invloed hebben op wat de taal moet bevatten en ze niet afhankelijk zijn van Sun. En zo werd C# geboren…

C# is een object georiënteerde programmeertaal en twee decennia na zijn geboorte in het jaar 2000 nog springlevend. C# is niet meer uitsluitend voor het .Net framework en Windows, maar inmiddels ook voor .NET Core. Met .NET Core komen ook andere platformen zoals OS/X en Linux binnen bereik.

Desktop applicaties (Console, Winforms), web applicaties (MVC/Blazor), mobile applicaties (Xamarin) ? Dat kan allemaal met C# gemaakt worden en zelfs games kunnen ermee gemaakt worden omdat C# de scripttaal is voor de Unity Game Engine. Wil je weten wat C# is ? Lees dan mijn blog artikelen over C#. Klik op een titel om meer te lezen.

C# artikelen


Onlangs gepubliceerd

  • Gegevenstypes in C# – conversie
    Gegevenstypes in C#? Hoe saai kunnen we het maken… Toch een belangrijk iets want het ging niet goed met de Ariane V raket door het gebruik van verkeerde gegevenstypes. In deze post iets over gegevenstypes en hoe ze te converteren. Meer lezen? Klik op het plaatje of op de titel…
  • Gegevenstypes in C# – type bepalen
    Hoe komen we erachter wat het gegevenstype is van iets? In C# kun je een aantal operatoren ervoor gebruiken (Is, As, GetType en TypeOf). Mijn uitleg zal ik illustreren aan de hand van de legende van Willem Tell om het geheel enigszins verteerbaar voor je te doen maken. Meer lezen? Klik op het plaatje of op de titel…
  • Expressies in C#
    Je schrijft een programma en wat moet het programma dan doen? Dat kan afhangen van de situatie. En hoe weet het programma welke situatie van toepassing is? Dat weet het programma via een expressie. We zullen het één en ander toelichten aan de hand van een voorbeeld waarin we willen weten wat een bank aan rentes hanteert voor haar leningen. Meer lezen? Klik op het plaatje of op de titel…
  • De Coalescing en de Ternary operator in C#
    De Coalescing operator en de Ternary operator zul je regelmatig tegenkomen in C# programma’s. Daarom een posting over deze bijzondere operatoren. We lichten het weer toe aan de hand van de legende van Willem Tell. Meer lezen? Klik op het plaatje of op de titel…
  • Strings in C#
    Ook C# heeft strings, maar in tegenstelling tot het minuscule kledingstuk dat dames wel eens dragen, is datgene wat een C# string kan hebben allesbehalve minuscuul. Er kunnen maar liefst één miljard karakters in een string. In dit artikel een uitleg wat we in C# met strings kunnen doen. Meer lezen? Klik op het plaatje of op de titel…
  • Reguliere Expressies in C#
    Data moet wel eens aan bepaalde voorwaarden voldoen en reguliere expressies kunnen gebruikt worden voor het valideren en het filteren van de data. Je kunt binnen C# met reguliere expressies werken want C# ondersteunt ook reguliere expressies. Meer over reguliere expressies in deze post. Meer lezen? Klik op het plaatje of op de titel…
  • Exceptions in C#
    Voor een computerprogramma is het al snel einde verhaal als het te maken krijgt met een onvoorziene (exceptionele) omstandigheid. Voorzien in al het onvoorziene? Dat kunnen we helaas niet, we zijn nog steeds niet paranormaal begaafd. Gelukkig kunnen we wel het onvoorziene afvangen met een exception. Meer lezen? Klik op het plaatje of op de titel…
  • Debuggen in C#
    Het oplossen van storingen bestond bij de eerste computers uit het verwijderen van klein ongedierte (bugs) dat zich ophield tussen de contacten van de relais. Debuggen staat heden ten dage voor het opsporen en het verhelpen van fouten in een computerprogramma. Meer lezen? Klik op het plaatje of op de titel…
  • De XMLWriterTraceListener in C#
    Het C# programma ‘doet het niet’. Een melding verschijnt op het scherm en de gebruiker klikt de melding weg. Met trace listeners hebben we een gewillig oor waarin niets verloren gaat en deze post behandelt de XML Writer Trace Listener, een trace listener dat alles wegschrijft naar een bestand in XML formaat. Meer lezen? Klik op het plaatje of op de titel…
  • Event logs in C#
    Windows gebruikt voor het loggen van haar events event logs. Microsoft is de kwaadste niet en staat toe dat ook jij event logs mag gebruiken. Meer lezen? Klik op het plaatje of op de titel…
  • Performance Counters in C#
    Je programma is niet vooruit te branden, maar is dat de schuld van jouw programma of is de desbetreffende computer of het netwerk waarop je programma draait het dode paard? Iedereen gaat er vanzelfsprekend vanuit dat jouw programma de bron is van al het kwaad, maar met de Performance counters (prestatiemeters) kunnen we zien waar het dode paard echt ligt. Meer lezen? Klik op het plaatje of op de titel…
  • Conditioneel Compileren in C#
    Veel software draait in Windows onder de paraplu van het .NET framework. De C# broncode wordt gecompileerd naar een build voor het .NET framework en het framework zorgt ervoor dat er uiteindelijk een stuk machinecode komt voor de computer. We hoeven niet altijd alles in een build te hebben en in deze post gaan we het hebben over hoe conditioneel gecompileerd kan worden. Meer lezen? Klik op het plaatje of op de titel…
  • Assemblies in C#
    In deze post gaan we het hebben over assemblies. Een assembly kan of een dynamic link library (.dll) of een executable (.exe) zijn. We laten zien hoe we met csc.exe (de csharpcommandline compiler) dynamic link libraries en executables kunnen maken waarbij de .exe gebruik maakt van de dynamic link libraries. Meer lezen? Klik op het plaatje of op de titel…
  • Strong named assemblies in C#
    In een eerdere post over assemblies hebben we laten zien hoe een dynamic link library (.dll) gemaakt kan worden. Helaas moeten we rekening houden met de mogelijkheid dat een .dll door een kwaadaardige entiteit gekaapt kan worden en dat onverlaten de .dll kunnen transformeren tot een kwaadaardig stuk software. Gelukkig kunnen we daar iets tegen doen door de assemblies strong named te maken zodat het voor hackers wat lastiger wordt om assemblies te infecteren. Meer lezen? Klik op het plaatje of op de titel…
  • De GAC / DLL Hell in C#
    Als we een assembly distribueren dan kan het voorkomen dat versies elkaar “bijten” omdat de aanroepende programmatuur nog gebruik maakt van een oude versie. We hebben vaak geen grip op het aanroepende programma omdat in de meeste gevallen een andere partij het aanroepende programma geschreven heeft. Het in goede banen leiden van de verschillende versies van een assembly kunnen we regelen met de Global Assembly Cache (GAC). Meer lezen? Klik op het plaatje of op de titel…
  • Reflection in C#
    Het woord reflection komen we ook tegen in de term zelfreflectie. Bij zelfreflectie hou je jezelf een spiegel voor en je staat stil bij je inspanningen voor den groote leijder en de glorieuze volkschgemeenschap en hoe je het nog beter kan doen. Voor software hoeven we gelukkig niet zo diepzinnig te wezen. Men noemt de mogelijkheid om assemblies te doorzoeken Reflection en in deze post een voorbeeld hoe dat te doen. Meer lezen? Klik op het plaatje of op de titel…
  • Object Oriëntatie in C#
    C# is een object georiënteerde programmeertaal waarin je allerlei klassen kunt definiëren. Vanuit de klassen creëer je objecten en het zijn uiteindelijk de objecten die een steentje gaan bijdragen aan jouw programma. We zullen het één en ander toelichten aan de hand van de GHB automobiel. Een veelbelovend ultra vervuilend fictief voertuig dat het resultaat is van een nieuw internationaal samenwerkingsverband. Meer lezen? Klik op het plaatje of op de titel…
  • Constructors in C#
    Je object is geboren uit een klasse en je object gaat de wijde wereld in om van alles te ontdekken en te doen. Een constructor is een methode dat bij de instantiatie van een object automatisch wordt gestart. Je wilt je objecten zo goed mogelijk van start laten gaan en constructors kunnen daarbij een handje helpen. Meer over constructors in deze post. Meer lezen? Klik op het plaatje of op de titel…
  • Overloading in C#
    We zien bij deze post dezelfde schone dame die elke keer een andere lichaamshouding aanneemt. M.a.w. ze doet elke keer weer wat anders door elke keer weer een andere lichaamshouding aan te nemen. Een soortgelijk principe vind je ook in C# terug bij methoden en men noemt die techniek Overloading. Een methode kan verschillende dingen doen en wat de methode precies moet doen, dat kan je sturen met de parameters die meegegeven worden bij de aanroep van de methode. Meer lezen? Klik op het plaatje of op de titel…
  • Overerving in C#
    Overerving is een object oriëntatie concept waardoor zo min mogelijk code gedupliceerd wordt en dat bereik je door hergebruik van de functionaliteit van bovenliggende klassen (de parent classes). Op die manier “erf” je de zaken van een parent zodat je die functionaliteit niet nogmaals in de child class hoeft op te nemen. We zullen het één en ander illustreren met het voorbeeld van de twee autofabrikanten die elkaar het leven zuur maken. Meer lezen? Klik op het plaatje of op de titel…
  • Overriding in C#
    Met overerving kun je gebruik maken van een bestaande klasse en “erf” je de zaken van een parent. Je kunt aan het geërfde een eigen draai geven door het geërfde te “overriden”. Zo hebben alle vogels standaard een snavel en als je wilt afwijken van die standaard dan kun je de standaard functionaliteit “overriden” zodat dat arme beest opeens geen snavel heeft, maar de kop van een tijger zoals in de uitgelichte afbeelding. We lichten het één en ander weer toe aan de hand van drie autofabrikanten die elkaar het leven zuur maken. Meer lezen? Klik op het plaatje of op de titel…
  • Abstracte klassen en Interfaces in C#
    Klassen kunnen op Interfaces of op Abstracte klassen gebaseerd zijn. Het is enigszins te vergelijken met met de taartvorm in de uitgelichte afbeelding. De taartvorm bepaalt de vorm voor het koekje, maar hoe dat koekje er verder uit komt te zien (hoe zoet?, wel geen chocolade er in? etc.) dat is aan jou. We zullen het één en ander weer toelichten aan de hand van de drie autofabrikanten die elkaar het leven zuur maken. Meer lezen? Klik op het plaatje of op de titel…
  • Meerdere interfaces in C#
    Een interface kan de basis vormen voor een klasse en een interface is een kaal raamwerk waarvan diens onderdelen verplicht geïmplementeerd moeten worden door de klasse die de interface gaat gebruiken. Een klasse kan in C# gevormd worden door meerdere interfaces. In deze post bekijken we hoe een klasse meerdere interfaces kan gebruiken. We lichten het toe aan de hand van fictieve autofabrikant MGIM. Meer lezen? Klik op het plaatje of op de titel…
  • Partial Classes in C#
    Je kunt de broncode van een klassendefinitie in meerdere bestanden zetten. Elk stuk wordt dan een partial class en de compiler zal uiteindelijk alle losse stukjes samenvoegen tot één geheel. We zullen het één en ander weer illustreren aan de hand van fictieve autofabrikant GHB. Meerdere teams van GHB gaan aan de nieuwe GHB auto werken en partial classes kunnen daarbij helpen om alles in goede banen te doen leiden. Meer lezen? Klik op het plaatje of op de titel…
  • Extension methods in C#
    Een extension method kan gemakkelijk aan een klasse toegevoegd worden en je hoeft daarbij niet aan de klasse zelf te sleutelen. Je kunt het vergelijken met die middeleeuwse balustrade op de uitgelichte afbeelding. Je hangt iets aan die muur en je gaat ervan uit dat die muur dat kan hebben en dat bijzondere voorzieningen verder niet nodig zijn. Meer lezen? Klik op het plaatje of op de titel…
  • De Garbage Collector in C#
    C# is een object georiënteerde programmeertaal waarin objecten worden geïnstantieerd uit klassen. Voor elk object wordt geheugen gebruikt en een object zal op een gegeven moment niet meer nodig zijn. De geheugenruimte voor die niet meer gebruikte objecten wordt dan vrijgegeven en dat gebeurt door de Garbage Collector (GC). In deze post meer over de Garbage Collector (GC). We zullen het één en ander toelichten aan de hand van een voertuig van fictieve autofabrikant MGIM. Meer lezen? Klik op het plaatje of op de titel…
  • Generics en collecties in C#
    In C# worden de termen Collecties en Generics in één adem genoemd. Het zijn zaken die te maken hebben met het opslaan van gegevens wat meestal begint met een geheugenvariabele. De geheugenvariabele groeit weer uit tot een collectie en de collectie wordt uiteindelijk met generics generiek gemaakt zodat het als een Zwitsers zakmes voor meerdere dingen gebruikt kan worden. Meer lezen? Klik op het plaatje of op de titel…
  • Collecties in C#
    Voor het opslaan van meerdere, min of meer bij elkaar horende gegevens kunnen we collecties gebruiken. Je zou een collectie kunnen maken voor het doen registreren van bijvoorbeeld de bolletjes breiwol van oma. C# ondersteunt diverse collecties en een aantal van die collecties zullen we in deze post bespreken. We zullen het één en ander weer toelichten aan de hand van de automobielen van fictieve autofabrikant GHB. Meer lezen? Klik op het plaatje of op de titel…
  • LINQ en C#
    LINQ staat voor Language Integrated Query en is bedoeld als een uniforme query opvraagtaal dat losgelaten kan worden op allerlei gegevensbronnen. In deze post demonstreren we het één en ander aan de hand van een List collectie dat gevuld is met GHB automobiel objecten van fictieve autofabrikant GHB. Meer lezen? Klik op het plaatje of op de titel…
  • Streams en bestanden in C#
    Bij geheugenvariabelen en collecties staat alles in het geheugen, maar alles is weg zodra je de applicatie afsluit en de computer uitzet. Het wordt allemaal wat permanenter als we gegevens in een bestand op de harde schijf kunnen opslaan en weer kunnen opvragen. Het gebruik van bestanden gaat in de praktijk meestal gepaard met het gebruik van “streams“. In deze post meer over streams en bestanden. Meer lezen? Klik op het plaatje of op de titel…
  • TCP/IP en C#
    TCP/IP is een protocol dat in de jaren ’70 van de vorige eeuw werd ontwikkeld en het grootste TCP/IP netwerk ter wereld kennen we inmiddels allemaal want dat is.. het internet. De WebRequest, de WebClient en de HTTPClient zijn .NET framework klassen die gericht zijn op interactie met een TCP/IP netwerk. We zullen in deze post laten zien hoe we in C# het TCP/IP netwerk betreden en hoe we een web pagina kunnen ophalen. Meer lezen? Klik op het plaatje of op de titel…
  • Ms Access en C#
    In deze post laten we zien hoe we gegevens ophalen uit een database. Een database heeft als voordeel dat ze veel gegevens kan bevatten en dat gemakkelijk naar de gewenste informatie gezocht kan worden waarbij het gezochte ook nog eens snel boven water komt. We laten in deze post zien hoe we gegevens ophalen uit een Ms Access database. Meer lezen? Klik op het plaatje of op de titel…
  • SQL Server en C#
    In deze post laten we zien hoe we gegevens ophalen uit een SQL Server database. SQL Server is een relationeel databasebeheersysteem van Microsoft en bedoeld voor grotere gegevensverzamelingen. Het ophalen van gegevens uit de database kan op meerdere manieren en zo hebben we de System.Data.SqlClient library en LINQ met Entity Framework. We zullen beide manieren laten zien in deze post. Meer lezen? Klik op het plaatje of op de titel…
  • Serialisatie en deserialisatie in C#
    Gesloten gecentraliseerde systemen (mainframes) domineren al lang niet meer het ICT landschap. Systemen kunnen her en der over de planeet verspreid zijn waarbij ze via het internet contact met elkaar maken en gegevens uitwisselen waarvoor dingen geserialiseerd en gedeserialiseerd moeten worden. Systemen kunnen voor hun interactie gebruik maken van talloze technologieën en in deze post demonstreren we de Web Service waarbij XML als berichtformaat wordt gebruikt en we geven een demo aan de hand van een Web API waarbij JSON als berichtformaat wordt gebruikt. Meer lezen? Klik op het plaatje of op de titel…
  • Delegates, events en call backs in C#
    Als je iets door iemand laat doen dan heb je meestal geen zin om constant achter die persoon aan te moeten zitten om te vragen of het gevraagde gedaan is. Je zou graag willen dat de andere partij op eigen initiatief aan jou laat weten dat het gevraagde is gedaan. Bijvoorbeeld via een belletje door één van de lieftallige dames op de uitgelichte afbeelding. Het is met software niet anders. Als je een ander programma hebt opgestart dan wil je niet constant kijken of dat programma klaar is. Je wil van dat programma een sein krijgen zodat je eigen programma’s naar aanleiding daarvan automatisch kunnen starten. Het is in C# allemaal mogelijk met delegates en events. Meer lezen? Klik op het plaatje of op de titel…
  • Threads in C#
    C# heeft de mogelijkheden voor het “parallel” doen uitvoeren van dingen en ook een “asynchrone” uitvoering wordt gefaciliteerd. Het wordt vaak in één adem genoemd, maar “parallel” en “asynchroon” zijn twee verschillende concepten met elk een ander uitgangspunt. We zullen de concepten toelichten aan de hand van een garagebedrijf dat onderhoudsbeurten doet aan auto’s. Een thread staat voor het opsplitsen van een programma in afzonderlijke onderdelen waarbij die onderdelen parallel naast elkaar uitgevoerd kunnen worden door meerdere processoren. We zullen in deze post demonstreren hoe je in C# threads kan activeren. Meer lezen? Klik op het plaatje of op de titel…
  • TPL en C#
    Het krijgen van grip op parallelle processen en het afstemmen van die parallelle processen op elkaar? Dat kan met Threads een enorme uitdaging zijn. Ook de makers van C# was dit niet ontgaan en men heeft uiteindelijk de Task Parallel Library (TPL) ontwikkeld en beschikbaar gesteld in C# 4.0. TPL kan een aantal zaken van de ontwikkelaar overnemen zodat de ontwikkelaar niet meer zelf hoeft te kijken naar bijvoorbeeld het aantal Threads dat gedefinieerd moet worden en hoe de threads ingesteld moeten worden opdat alles zo optimaal mogelijk wordt opgepakt door de aanwezige processoren in de computer. Een aantal aspecten van de TPL zullen we in deze post bespreken. Meer lezen? Klik op het plaatje of op de titel…
  • Async Await in C#
    Het kan bijzonder irritant wezen als computers en schermen blokkeren zodra een langlopend programma is opgestart. We willen dat het programma op de achtergrond (asynchroon) draait zodat we in die tussentijd ook nog andere dingen op die computer kunnen doen. We kunnen met Threads en de TPL ervoor zorgen dat een programma asynchroon wordt opgestart en we kunnen sinds C# 5.0 ook de async await keywords ervoor gebruiken. Een hoofdprogramma moet bij een async await op dingen wachten zoals de engel op de uitgelichte afbeelding. Het verschil is dat een hoofdprogramma op een taak wacht en de engel op jou wacht zodat ze je kan ophalen zodra je gaat hemelen. Helaas voor de engel en het hoofdprogramma dat die moeten wachten, maar dat geldt niet voor jou, want jij hoeft nergens op te wachten en jij kan gewoon alles blijven doen want alles is asynchroon opgestart. In deze post zullen we het één en ander toelichten aan de hand van een Windows Form van waaruit we een programma op meerdere manieren opstarten. Meer lezen? Klik op het plaatje of op de titel…
  • C# 9 Features
    Microsoft komt om de zoveel jaar met een nieuwe versie van C# en zo is in november 2020 versie 9 uitgebracht. In deze post gaan we in op de volgende C# 9 features: Top Level Calls, Init Only Setters, Fit and Finish, Target typing new expression, Pattern Matching en Record types. Meer lezen? Klik op het plaatje of op de titel…
  • Minimal APIs
    Microsoft heeft in november 2021 .Net 6 met C# 10 uitgebracht. In C# 10 kunnen zogenaamde Minimal APIs gebouwd worden, maar waarin verschillen die van de Web API Server Controllers? Van Minimal APIs wordt ook gezegd dat ze beter geschikt zijn voor het doen bouwen van Micro Services. Wat zijn Micro Services dan en wat heeft de “cloud” ermee te maken? Meer erover in deze post. Klik op het plaatje of op de titel…
  • C# 10 Features
    Microsoft komt om de zoveel tijd met een nieuwe versie van C# en zo is in november 2021 .Net 6 met C# 10 uitgebracht. In deze post gaan we in op de volgende C# 10 features: de Nullable References, de Global Using Directive, de filescoped namespace, de Record Struct, de Constant interpolated string en de Extended Property Pattern. Meer lezen? Klik op het plaatje op op de titel…
  • C# 11 Features
    Microsoft komt om de zoveel tijd met een nieuwe versie van C# en zo is in november 2022 .Net 7 met C# 11 uitgebracht. In deze post gaan we in op de volgende C# 11 features: de Raw String Literals, de required keyword, de List Pattern matching, de File access modifier en de UTF8- string literal. Meer lezen? Klik op het plaatje op op de titel…
  • Git en GitHub
    Versiebeheer en het doen opslaan van je broncode in een repository in de cloud? Ik loop er regelmatig tegenaan (zowel werk als privé) waarbij ik af en toe het spoor bijster ben en daarom deze post om het één en ander op een rij te zetten. We gebruiken in deze post Git als lokaal versiebeheersysteem waarbij we voor het doen opslaan van de repositories in de cloud gebruik maken van GitHub en we voor de diverse Git-commando’s gebruik maken van de Git Bash command line interface. Meer lezen? Klik op het plaatje op op de titel…
  • Git en GitHub (2)
    Deze post is een vervolg op de Git en GitHub-post waarin we het hebben gehad over Git, GitHub en het doen vullen van een GitHub remote repository. In deze post gaan we in op het .gitignore-bestand, de local Git repository en de remote GitHub repository, branches en pull requests. We illustreren het één en ander aan de hand van een index.html waarin we een tekst veranderen. Meer lezen? Klik op het plaatje op op de titel…
  • Git en GitHub – Merge Conflicts
    Een versiebeheersysteem biedt mogelijkheden voor het laten werken van meerdere mensen aan eenzelfde project. De situatie kan zich echter voordoen dat je bezig bent met een bestand en tegelijkertijd met jou iemand anders ook met het bestand bezig is geweest. Versiebeheersystemen zoals Git en GitHub weten dan niet meer wiens wijzigingen overgenomen moeten worden met een merge conflict als resultaat. In deze post zullen we het nader hebben over merge conflicts, wanneer ze precies optreden en hoe ze op te lossen. Meer lezen? Klik op het plaatje op op de titel…
  • Git en GitHub – terughalen vorige versie
    Het doel van een versiebeheersysteem (VCS = Version Control System) is dat we bestanden kunnen volgen zodat we weten of de bestanden zijn gewijzigd en wat er aan de bestanden is gewijzigd en wanneer. Een versiebeheersysteem verliest echter snel aan bestaansrecht als de VCS niet gebruikt kan worden voor het doen terughalen van een vorige versie. In deze post zullen we ingaan op het terughalen van een vorige versie waarbij alles op zowel de lokale PC als de remote repository staat via pull requests en de commit historie intact moet blijven en alle oude versies bewaard moeten blijven in de repositories. Meer lezen? Klik op het plaatje of op de titel…
  • Git en GitHub – terughalen vorige versie (2)
    In deze post zullen we nader ingaan op de “private” aanpassingen die betrekking hebben op situaties waarin je remote repository private is en een afspiegeling van je lokale PC mag wezen, en situaties waarbij je nog niks hebt gepushed naar de remote repository en alles nog lokaal staat en je dingen wil corrigeren alvorens je de daadwerkelijke push doet naar de remote repository. Voor de “private” situaties kan gebruik gemaakt worden van de git restore en de git reset welke we in deze post nader zullen bekijken. Meer lezen? Klik op het plaatje op op de titel…
  • SourceTree
    Met de Git Bash CLI kunnen Git commando’s ingegeven worden waarmee je het één en ander voor elkaar krijgt m.b.t. je lokale Git repository en je remote repository. Veel gebruikers hebben toch liever een GUI (Graphical User Interface) omdat die wat gebruikersvriendelijker is en je niet hoeft te weten wat de te gebruiken (Git) commando’s zijn. In deze post gaan we SourceTree bekijken, een Git GUI tool van Atlassian. Meer lezen? Klik op het plaatje op op de titel…