In C # is een functie een manier om code te verpakken die iets doet en vervolgens de waarde retourneert. Anders dan in C, C ++ en sommige andere talen, bestaan functies niet op zichzelf. Ze maken deel uit van een objectgerichte benadering van programmeren.
Een programma om spreadsheets te beheren kan bijvoorbeeld een sum () functie als onderdeel van een object bevatten.
In C # kan een functie een lidfunctie worden genoemd - het is een lid van een klasse - maar die terminologie blijft over van C ++. De gebruikelijke naam ervoor is een methode.
Er zijn twee soorten methoden: instantiemethode en statische methode. Deze introductie behandelt de instantiemethode.
Het onderstaande voorbeeld definieert een eenvoudige klasse en noemt deze Test. Dit voorbeeld is een eenvoudig consoleprogramma, dus dit is toegestaan. Gewoonlijk moet de eerste klasse die in het C # -bestand is gedefinieerd, de formulierklasse zijn.
Het is mogelijk om een lege klas als deze te hebben klassentest , maar het is niet nuttig. Hoewel het er leeg uitziet, erft het, net als alle C # -klassen, over van het object dat het bevat en bevat het een standaardconstructor in het hoofdprogramma.
var t = new Test ();
Deze code werkt, maar het doet niets als het wordt uitgevoerd, behalve een instantie maken t van de lege testklasse. De onderstaande code voegt een functie toe, een methode die het woord "Hallo" uitvoert.
het gebruik van systeem;
naamruimte funcex1
klassetest
openbare nietig SayHello ()
Console.WriteLine ("Hallo");
klassenprogramma
statische void Main (string [] args)
var t = new Test ();
t.SayHello ();
Console.ReadKey ();
Dit codevoorbeeld bevat Console.ReadKey (), dus wanneer het wordt uitgevoerd, wordt het consolevenster weergegeven en wacht het op een toetsinvoer zoals Enter, Spatie of Return (niet de shift-, Alt- of Ctrl-toetsen). Zonder dit zou het het consolevenster openen, "Hallo" uitvoeren en alles in een oogwenk sluiten.
De functie Zeg hallo gaat over een zo eenvoudig mogelijke functie. Het is een openbare functie, wat betekent dat de functie zichtbaar is van buiten de klas.
Als u het woord verwijdert openbaar en probeer de code te compileren, deze mislukt met een compilatiefout "funcex1.test.SayHello () 'is niet toegankelijk vanwege het beveiligingsniveau." Als u het woord 'privé' toevoegt waar het woord public was en opnieuw wordt gecompileerd, krijgt u dezelfde compileerfout. Wijzig het gewoon terug naar 'openbaar'.
Het woord leegte in de functie betekent dat de functie geen waarden retourneert.
De code voor de definitie van een andere functie, MyAge (), is:
public int MyAge ()
terugkeer 53;
Voeg dat toe direct na de Zeg hallo() methode in het eerste voorbeeld en voeg deze twee regels eerder toe Console.ReadKey ().
var age = t.MyAge ();
Console.WriteLine ("David is 0 jaar oud", leeftijd);
Als u het programma uitvoert, wordt dit nu uitgevoerd:
Hallo
David is 53 jaar oud,
De var age = t.MyAge (); aanroep van de methode retourneerde de waarde 53. Het is niet de meest nuttige functie. Een nuttiger voorbeeld is de spreadsheet Sum-functie met een reeks ints, de startindex en het aantal waarden dat moet worden opgeteld.
Dit is de functie:
public float Sum (int [] waarden, int startindex, int endindex)
var-totaal = 0;
voor (var index = startindex; index<=endindex; index++)
totaal + = waarden [index];
retour totaal;
Hier zijn drie use cases. Dit is de code die moet worden toegevoegd in Main () en waarmee de functie Sum wordt getest.
var-waarden = new int [10] 1, 2, 3, 4, 5, 6, 7, 8, 9,10;
Console.WriteLine (t.Sum (waarden, 0,2)); // Moet 6 zijn
Console.WriteLine (t.Sum (waarden 0,9)); // moet 55 zijn
Console.WriteLine (t.Sum (waarden 9,9)); // moet 10 zijn omdat de 9e waarde 10 is
De For-lus telt de waarden in het bereik startindex op tot endindex, dus voor startindex = 0 en endindex = 2 is dit de som van 1 + 2 + 3 = 6. Terwijl voor 9,9 alleen die ene waarden [ 9] = 10.
Binnen de functie wordt het totaal van de lokale variabele geïnitialiseerd op 0 en worden vervolgens de relevante delen van de matrixwaarden toegevoegd.