Oefening: de methoden van een .NET-klasse aanroepen
- 12 minuten
Of u het nu beseft of niet, u hebt C#-methoden aangeroepen sinds uw eerste "Hallo wereld!"-toepassing. Deze toepassing gebruikt de WriteLine() methode van de Console klasse om het bericht 'Hallo wereld!' weer te geven.
Niet alle klassen en methoden worden echter op dezelfde manier geïmplementeerd. In deze les worden enkele van de meest voorkomende varianten behandeld die u moet begrijpen wanneer u methoden uit de .NET-klassebibliotheek gebruikt. Daarnaast is het belangrijk dat u leert hoe u documentatie opzoekt en gebruikt om meer inzicht te krijgen in elke methode.
Methoden aanroepen uit de .NET-klassebibliotheek
Dankzij uw vorige ervaring met de methode Console.WriteLine() zou u de basisbeginselen al moeten kennen:
- Begin met het typen van de klassenaam. In dit geval is
Consolede klassenaam . - Voeg de operator voor lidtoegang toe, het
.symbool. - Voeg de naam van de methode toe. In dit geval is
WriteLinede naam van de methode . - Voeg de operator voor het aanroepen van de methode toe. Dit is een set haakjes
(). - Geef ten slotte de argumenten op die worden doorgegeven aan de methode, indien aanwezig, tussen de haakjes van de operator voor aanroepen van de methode. In dit geval geeft u de tekst op die u wilt dat de
Console.WriteLine()methode naar de console schrijft (bijvoorbeeld"Hello World!").
Afhankelijk van de manier waarop de ontwikkelaars de opgegeven methode hebben ontworpen en geïmplementeerd, moet u mogelijk ook het volgende doen:
- Geef aanvullende waarden door als invoerparameters.
- Accepteer een retourwaarde.
In de volgende les gaat u onderzoeken hoe u invoerwaarden doorgeeft aan een methode en hoe een methode kan worden gebruikt om een waarde te retourneren aan de aanroeproutine.
Hoewel sommige methoden op dezelfde manier kunnen worden aangeroepen als u aangeroepen Console.WriteLine()hebt, zijn er andere methoden in de .NET-klassebibliotheek waarvoor een andere benadering is vereist.
Uw coderingsomgeving voorbereiden
Deze module bevat coderingsactiviteiten die u begeleiden bij het bouwen en uitvoeren van voorbeeldcode. U wordt aangeraden deze activiteiten uit te voeren met Behulp van Visual Studio Code als uw ontwikkelomgeving. Het gebruik van Visual Studio Code voor deze activiteiten helpt u om comfortabeler code te schrijven en uit te voeren in een ontwikkelomgeving die wordt gebruikt door professionals wereldwijd.
Open Visual Studio Code.
U kunt de Windows-Startmenu (of een equivalente resource voor een ander besturingssysteem) gebruiken om Visual Studio Code te openen.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Navigeer in het dialoogvenster Open Folder naar de Windows-bureaublad-map.
Als u een andere maplocatie hebt waar u codeprojecten bewaart, kunt u die maplocatie gebruiken. Voor deze training is het belangrijk om een locatie te hebben die gemakkelijk te vinden en te onthouden is.
Selecteer in het dialoogvenster Map openen de optie Map selecteren.
Als u een beveiligingsdialoogvenster ziet waarin u wordt gevraagd of u de auteurs vertrouwt, selecteert u Ja.
Selecteer In het menu Visual Studio Code Terminal de optie Nieuwe terminal.
U ziet dat in een opdrachtprompt in het terminalvenster het mappad voor de huidige map wordt weergegeven. Voorbeeld:
C:\Users\someuser\Desktop>Opmerking
Als u op uw eigen pc werkt in plaats van in een sandbox of gehoste omgeving en u andere Microsoft Learn-modules in deze C#-serie hebt voltooid, hebt u mogelijk al een projectmap gemaakt voor codevoorbeelden. Als dat het geval is, kunt u de volgende stap overslaan, die wordt gebruikt om een console-app te maken in de map TestProject.
Voer bij de terminalopdrachtprompt de volgende prompt in om een nieuwe consoletoepassing in een opgegeven map te maken:
dotnet new console -o ./CsharpProjects/TestProjectDeze .NET CLI-opdracht maakt gebruik van een .NET-programmasjabloon om een nieuw C#-consoletoepassingsproject te maken op de opgegeven maplocatie. Met de opdracht worden de mappen CsharpProjects en TestProject voor u gemaakt en wordt TestProject gebruikt als de naam van uw
.csprojbestand.Als er een bericht wordt weergegeven waarin wordt aangegeven dat de bestanden al bestaan, gaat u verder met de volgende stappen. U gebruikt de bestaande projectbestanden opnieuw.
Vouw in de EXPLORER-weergave de map CsharpProjects uit .
U ziet de map TestProject en twee bestanden, een C#-programmabestand met de naam Program.cs en een C#-projectbestand met de naam TestProject.csproj.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Selecteer in het dialoogvenster Map openen de map CsharpProjects en klik vervolgens op Map selecteren.
Vouw in de explorer-weergave de map TestProject uit en selecteer Program.cs.
Verwijder de bestaande coderegels.
U gebruikt dit C#-consoleproject om codevoorbeelden te maken, te bouwen en uit te voeren tijdens deze module.
Sluit het venster Terminal.
Verschillende soorten methoden aanroepen in de .NET-klassebibliotheek
Voer in Visual Studio Code Editor de volgende code in om een codevoorbeeld te maken waarmee methoden van de
System.RandomenSystem.Consoleklassen worden geïmplementeerd:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Met deze code wordt een dobbelsteenroll gesimuleerd met behulp van de
Random.Next()methode om een getal te genereren en deConsole.WriteLine()methode om de waarde weer te geven.Opmerking
Verderop in deze les bekijkt u de code.
Klik in het menu Visual Studio Code File op Opslaan.
Als u in de EXPLORER-weergave een Terminal wilt openen op de locatie van de map TestProject, klikt u met de rechtermuisknop op TestProject en selecteert u Openen in geïntegreerde terminal.
U ziet dat het terminalvenster een opdrachtprompt bevat waarin een mappad wordt weergegeven. Voorbeeld:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Wanneer u terminal gebruikt om .NET CLI-opdrachten uit te voeren, worden opdrachten uitgevoerd vanaf de locatie van de weergegeven map. Zorg ervoor dat de codemap overeenkomt met het mappad dat wordt weergegeven in de opdrachtprompt voordat u de code bouwt of uitvoert.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
U ziet dat een getal tussen 1 en 6 wordt weergegeven in de console-uitvoer (het aantal puntjes op de dobbelsteen). Als u de code voldoende keer uitvoert, ziet u dat elk van de getallen 1-6 wordt weergegeven.
Neem even de tijd om de syntaxis te onderzoeken die wordt gebruikt voor toegang tot de
Next()enWriteLine()methoden.U ziet dat u verschillende technieken gebruikt om toegang te krijgen tot de methoden.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Op de derde coderegel neemt u een verwijzing naar de
Consoleklasse op en roept u deConsole.WriteLine()methode rechtstreeks aan. U gebruikt echter een andere techniek voor het aanroepen van deRandom.Next()methode. De reden waarom u twee verschillende technieken gebruikt, is omdat sommige methoden stateful zijn en andere 'staatloos'. In de volgende sectie bekijkt u het verschil tussen stateful en stateless methoden.
Stateful vs. staatloze methoden
In softwareontwikkelingsprojecten wordt de termstatus gebruikt om de toestand van de uitvoeringsomgeving op een bepaald moment in de tijd te beschrijven. Omdat uw code regel voor regel wordt uitgevoerd, worden waarden in variabelen opgeslagen. De huidige status van de toepassing is op elk willekeurige tijdstip tijdens de uitvoering de verzameling van alle waarden in het geheugen.
Sommige methoden zijn niet afhankelijk van de huidige status van de toepassing om correct te kunnen werken. Staatloze methoden worden dan ook geïmplementeerd zodat er geen referenties of wijzigingen in waarden nodig zijn die al zijn opgeslagen in het geheugen. Staatloze methoden worden ook wel statische methoden genoemd.
De methode Console.WriteLine() is bijvoorbeeld niet afhankelijk van waarden die zijn opgeslagen in het geheugen. De functie wordt uitgevoerd en voltooid zodat dat er enige invloed is op de status van de toepassing.
Andere methoden moeten echter wel toegang hebben tot de status van de toepassing om goed te kunnen werken. Met andere woorden, stateful methoden zijn zodanig gebouwd dat ze afhankelijk zijn van waarden die zijn opgeslagen in het geheugen door eerdere regels code die al zijn uitgevoerd. Ze kunnen ook de status van de toepassing wijzigen door waarden bij te werken of nieuwe waarden op te slaan in het geheugen. Dit worden ook wel exemplaarmethoden genoemd.
Stateful methoden (exemplaarmethoden) houden de status bij in velden; dit zijn variabelen die zijn gedefinieerd voor de klasse. Elk nieuwe exemplaar van de klasse krijgt een eigen kopie van die velden waar de status in wordt opgeslagen.
Eén klasse kan zowel stateful- als staatloze methoden ondersteunen. Als u echter stateful methoden moet aanroepen, maakt u eerst een exemplaar van de klasse zodat de methode toegang krijgt tot de status.
Een exemplaar van een klasse maken
Een exemplaar van een klasse wordt aangeroepen als een object. Als u een nieuw exemplaar van een klasse wilt maken, gebruikt u de operator new. Houd rekening met de volgende regel code waarmee een nieuw exemplaar van de klasse Random wordt gemaakt om een nieuw object te maken met de naam dice:
Random dice = new Random();
De operator new doet verschillende belangrijke dingen:
- Om te beginnen wordt er een adres aangevraagd uit het geheugen van de computer die voldoende ruimte biedt om een nieuw object op te slaan op basis van de klasse
Random. - Het nieuwe object wordt gemaakt en opgeslagen op het geheugenadres.
- Het retourneert het geheugenadres, zodat het in het
diceobject kan worden opgeslagen.
Vanaf dat moment, wanneer naar het dice object wordt verwezen in code, voert de .NET Runtime achter de schermen een zoekactie uit om de illusie te geven dat u rechtstreeks met het object zelf werkt.
Uw code gebruikt het dice object als een variabele waarin de status van de Random klasse wordt opgeslagen. Wanneer u de Next() methode voor het dice object aanroept, gebruikt de methode de status die in het dice object is opgeslagen om een willekeurig getal te genereren.
Met de nieuwste versie van .NET Runtime kunt u een object instantiëren zonder dat u de naam van het type hoeft te herhalen (aanroep van doeltypeconstructor). Met de volgende code wordt bijvoorbeeld een nieuw exemplaar van de Random klasse gemaakt:
Random dice = new();
De bedoeling is om de leesbaarheid van code te vereenvoudigen. U gebruikt altijd haakjes bij het schrijven van een doelexpressie new .
Waarom is de methode Next() stateful?
U vraagt zich misschien af waarom de methode Next() is geïmplementeerd als een stateful methode? Konden de .NET-klassebibliotheekontwerpers geen manier bedenken om een willekeurig getal te genereren zonder dat daarvoor een status is vereist? En wat wordt er precies opgeslagen of waar wordt precies naar verwezen door de methode Next()?
Dit zijn goede vragen. Op hoog niveau zijn computers uitstekend in het opvolgen van specifieke instructies om een betrouwbaar en herhaalbaar resultaat te creëren. Om de illusie van willekeur te creëren, hebben de ontwikkelaars van de methode Next() ervoor gekozen de datum en tijd vast te leggen tot op de milliseconde nauwkeurig en die gegevens vervolgens te gebruiken voor een algoritme dat elke keer een ander getal produceert. Dit is dus niet geheel willekeurig, maar voor de meeste toepassingen wel voldoende. De status die wordt vastgelegd en onderhouden gedurende de levensduur van het dice object is de seed-waarde. Bij elke volgende aanroep van de methode Next() wordt het algoritme opnieuw uitgevoerd. Er wordt voor gezorgd dat de basis wordt gewijzigd zodat niet (onnodig) dezelfde waarde wordt geretourneerd.
Als u de Random.Next() methode wilt gebruiken, hoeft u echter niet te begrijpen hoe deze werkt. Het belangrijkste om te weten is dat voor sommige methoden u een exemplaar van een klasse moet maken voordat u ze aanroept, terwijl andere niet.
Hoe kunt u bepalen of u een exemplaar van een klasse moet maken voordat u de methoden aanroept?
Eén methode om te bepalen of een methode stateful of stateless is, is door de documentatie te raadplegen. De documentatie bevat voorbeelden die aangeven of de methode moet worden aangeroepen vanuit het objectexemplaren of rechtstreeks vanuit de klasse.
Opmerking
Mogelijk moet u omlaag schuiven op de documentatiepagina om de codevoorbeelden te vinden.
Als alternatief voor het zoeken in productdocumentatie kunt u rechtstreeks vanuit de klasse zelf proberen toegang te krijgen tot de methode. Als het werkt, weet u dat het een staatloze methode is. Het ergste dat kan gebeuren, is dat er een compilatiefout optreedt.
Probeer rechtstreeks toegang te krijgen tot de Random.Next() methode en kijk wat er gebeurt.
Voer de volgende coderegel in de Visual Studio Code-editor in:
int result = Random.Next();U weet al dat dit
Next()een stateful methode is, maar in dit voorbeeld ziet u hoe de Visual Studio Code Editor reageert wanneer u een methode onjuist probeert te openen.U ziet dat er een rode golvende lijn wordt weergegeven onder
Random.Next, waarmee wordt aangegeven dat u een compilatiefout hebt.Als de methode die u wilt gebruiken staatloos is, wordt er geen rode golvende lijn weergegeven.
Beweeg de muisaanwijzer over de rode golvende lijn.
Er wordt een pop-upvenster weergegeven met het volgende bericht:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'Zoals u in de code aan het begin van de les hebt gezien, kunt u deze fout oplossen door een exemplaar van de
Randomklasse te maken voordat u toegang krijgt tot deNext()methode. Voorbeeld:Random dice = new Random(); int roll = dice.Next();In dit geval wordt de
Next()methode aangeroepen zonder invoerparameters.
Samenvatting
- Voor het aanroepen van methoden van een klasse uit de .NET-klassebibliotheek gebruikt u de indeling
ClassName.MethodName(). Het symbool.is daarbij de operator voor ledentoegang tot de methode die in de klasse is gedefinieerd. De()-symbolen zijn de operators voor het aanroepen van methoden. - Bij het aanroepen van een staatloze methode hoeft u niet eerst een nieuw exemplaar van de klasse te maken.
- Bij het aanroepen van een stateful methode moet u eerst een exemplaar van de klasse maken en de methode van het object openen.
- Als u een nieuw exemplaar van een klasse wilt maken, gebruikt u de operator
new. - Een exemplaar van een klasse wordt aangeroepen als een object.
Uw kennis controleren
Feedback
Is deze pagina nuttig?
No
Hulp nodig bij dit onderwerp?
Wilt u Ask Learn gebruiken om iets te verduidelijken of u door dit onderwerp te leiden?