Oefening: toevoegen met impliciete gegevensconversie
Vaak wilt u wiskundige bewerkingen uitvoeren op numerieke gegevens. U begint met toevoeging in deze les en gaat verder met andere bewerkingen in de volgende les, omdat er een belangrijke les is om te leren hoe de C#-compiler uw code parseert en interpreteert.
Twee numerieke waarden optellen
Als u twee getallen samen wilt optellen, gebruikt u de opteloperator, het plusteken +
. Ja, hetzelfde plus-symbool +
dat u gebruikt voor het samenvoegen van tekenreeksen, wordt ook gebruikt voor optellen. In C# wordt een symbool vaak voor meerdere doeleinden gebruikt. In dat geval spreekt men van operator-overloading.
In dit geval begrijpt de C#-compiler wat u probeert te doen. Het compileerprogramma parseert de code en ziet dat +
(de operator) zich tussen twee numerieke waarden (de operands) bevindt. Gezien de gegevenstypen van de variabelen (beide zijn een int
), gaat het programma ervan uit dat u van plan was om die twee waarden bij elkaar op te tellen.
Voer de volgende code in de .NET-editor in:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
Voer de code uit en u ziet het volgende resultaat in de uitvoerconsole:
19
Gegevenstypen combineren om impliciete typeconversie af te dwingen
Wat gebeurt er als u het +
symbool probeert te gebruiken met zowel als string
int
waarden?
Wijzig de code die u hebt geschreven zodat deze overeenkomt met de volgende code:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
Voer de code uit en u ziet het volgende resultaat in de uitvoerconsole:
Bob sold 7 widgets.
In dit geval begrijpt de C#-compiler dat u het +
symbool wilt gebruiken om de twee operanden samen te voegen. Dit is duidelijk omdat het symbool +
tussen operands van de gegevenstypen string
en int
staat. Daarom wordt de int
-variabele widgetsSold
tijdelijk impliciet geconverteerd naar een string
zodat deze kan worden samengevoegd met de rest van de tekenreeks. De C#-compiler probeert u te helpen waar dat kan, maar in het ideale geval geeft u expliciet aan wat uw intentie is.
Probeer nu iets moeilijkers waarbij u getallen optelt en tekenreeksen samenvoegt
Wijzig de code die u hebt geschreven zodat deze overeenkomt met de volgende code:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
Voer de code uit en u ziet het volgende resultaat in de uitvoerconsole:
Bob sold 77 widgets.
In plaats van de int
-variabele widgetsSold
aan de letterlijke waarde int
7
toe te voegen, behandelt de compiler alles als een tekenreeks en wordt alles samengevoegd.
Haakjes toevoegen om uw intentie aan de compiler te verduidelijken
Wijzig de code die u hebt geschreven zodat deze overeenkomt met de volgende code:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
Voer de code uit en u ziet het volgende resultaat in de uitvoerconsole:
Bob sold 14 widgets.
Door het haakjes-symbool ()
krijgt de operator een andere functie. In dit geval vormen de haakjes voor openen en sluiten de operator voor de volgorde van de bewerkingen, net als in een wiskundige formule. U geeft aan dat de binnenste haakjes eerst moeten worden omgezet, wat resulteert in het toevoegen van int
waarden widgetsSold
en de waarde 7
. Nadat dit is opgelost, wordt het resultaat impliciet geconverteerd naar een tekenreeks zodat deze kan worden samengevoegd met de rest van het bericht.
Notitie
Vermijd weliswaar het uitvoeren van een berekening en een samenvoeging in één regel code, Het gaat er hier echter om dat u begrijpt hoe het compileerprogramma operators en operanden interpreteert.
Samenvatting
Dit is wat u tot nu toe hebt geleerd over wiskundige bewerkingen in C#:
- U kunt rekenkundige bewerkingen, zoals het optellen van getallen, uitvoeren.
- Zowel bij het samenvoegen van tekenreeksen als bij het optellen wordt het plusteken
+
gebruikt. Dit wordt operator-overloading genoemd. Het compileerprogramma leidt het juiste gebruik af op basis van de gegevenstypen waarvoor de bewerking wordt uitgevoerd. - De C#-compiler converteert een
int
indien mogelijk impliciet naar eenstring
als het duidelijk is dat de ontwikkelaar de tekenreeksrepresentatie van een getal voor presentatiedoeleinden wil samenvoegen. - Gebruik haakjes om een volgorde van bewerkingen te definiëren om de compiler expliciet te laten weten dat u bepaalde bewerkingen wilt uitvoeren vóór andere bewerkingen.