Uvod v ključno besedo donosa v C #
Prinos je kontekstualna ključna beseda v C #. Kontekstualne ključne besede so tiste ključne besede v C #, ki niso rezervirane za celoten program. Namesto tega so rezervirane ključne besede za določene dele programa, kjer je ključna beseda lahko ustrezno uporabljena. Te ključne besede se lahko uporabljajo kot veljavni identifikatorji, kadar njihova ustreznost ne pomeni nobenega posebnega pomena za prevajalnik.
Ključna beseda donos pomeni, da je metoda ali ponudnik, ki vsebuje ključno besedo, iterator metoda / accessor. Metoda iteratorja / accessor je tista, ki ne vrne ene same vrednosti. Namesto tega se imenuje v iteracijah in v vsaki iteraciji vrne različne vrednosti.
Sintaksa
Sintaksa ključne besede donosnosti je precej preprosta. Preprosto morate določiti ključno besedo pred povratnim stavkom metode ali dostopnika.
yield return ;
ALI
yield break;
To sta dve izvedbi ključne besede. Če ga uporabljamo s stavkom return, ključna beseda donos vrne naslednjo vrednost, izračunano iz izraza, dokler ni izpolnjen izhodni pogoj izraza. Ko se uporablja s ključno besedo break, ključna beseda donosi prekine iteracijo in izvedba programa izide iz metode / accessorja.
Kako ključna beseda donos deluje v C #?
- Kako torej ključna beseda v C #? Kakšna je notranja implementacija ključne besede v prevajalniku C #? Naj razumemo. Metodo, ki vsebuje ključno besedo donosa, lahko porabi iteratorjeva zanka, kot je foreach ali LINQ poizvedba. Vsaka iteracija zanke kliče po metodi. Koda v metodi se izvaja, dokler ne pride do izjave o donosu ali premoru donosa.
- Trenutni položaj izvedbe v metodi se obdrži in naslednja iteracija se nadaljuje tam, kjer je bila v prejšnji iteraciji prekinjena.
- To je bilo preprosto, kajne? Pojdimo v tehnično izvedbo istega. Metoda, ki vsebuje ključno besedo donosa, mora vedno vrniti IEnumerable ali IEnumerator. Kadar koli prevajalnik naleti na ključno besedo donosa, ve, da metodo porabi iterator. Ko se prikliče metoda, prevajalnik ne izvaja telesa metode, kot običajno.
- Namesto tega izvrši telo metode in vrne sestavljeni nabor IEnumerables spremenljivi iterator spremenljivki. Pri vsakem klicu metode prevajalnik poišče izjavo o donosu in zaustavi izvedbo te izjave. Naslednja ponovitev zanke nadaljuje izvajanje z zadnjega zaustavljenega mesta. To traja do izhodnega stanja zanke ali izjave o prekinitvi donosa. Za shranjevanje informacij o stanju po vsaki iteraciji prevajalnik ustvari stanje stroja.
Primeri ključne besede donosa v C #
Poglejmo nekaj primerov:
Primer # 1 - Metoda
Spodnji primer ustvari niz Fibonaccije s pomočjo ključne besede donos.
using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
foreach (int ele in GetFibonacciSeries(10))
(
Console.Write(ele + "\t");
)
)
public static IEnumerable GetFibonacciSeries(int x)
(
for (int a = 0, b = 0, c = 1; a < x; a++)
(
yield return b;
int temp = b + c;
b = c;
c = temp;
)
)
)
Primer # 2 - Accessor
Naslednji primer uporablja ključno besedo donosa z dostopom do dostopa.
using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
foreach (Day day in new Days().DaysOfWeek)
(
Console.WriteLine("Day (0) of the week is (1)", day.DayOfWeek, day.DayName);
)
)
public static IEnumerable Show(int x)
(
for (int a = 0, b = 0, c = 1; a < x; a++)
(
yield return b;
int temp = b + c;
b = c;
c = temp;
)
)
public class Days
(
public IEnumerable DaysOfWeek
(
get
(
yield return new Day(DayName = "Sunday", DayOfWeek = 1);
yield return new Day(DayName = "Monday", DayOfWeek = 2);
yield return new Day(DayName = "Tuesday", DayOfWeek = 3);
yield return new Day(DayName = "Wednesday", DayOfWeek = 4);
yield return new Day(DayName = "Thursday", DayOfWeek = 5);
yield return new Day(DayName = "Friday", DayOfWeek = 6);
yield return new Day(DayName = "Saturday", DayOfWeek = 7);
)
)
)
public class Day
(
public string DayName
( get; set; )
public int DayOfWeek
( get; set; )
)
)
Primer # 3 - prekinitev donosa
Naslednji primer prikazuje uporabo izjave o prekinitvi donosa. Ponovitev se konča takoj, ko se najde številka v seriji ali doseže največja omejitev iskanja.
using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
int elementToFind = 21;
int maxElements = 100;
foreach (int ele in FindFibonacciNumber(elementToFind, maxElements))
(
Console.Write("Found the number " + elementToFind + " in Fibonacci series.");
)
)
public static IEnumerable FindFibonacciNumber(int n, int max)
(
for (int a = 0, b = 0, c = 1; true; a++)
(
if (a > max)
(
Console.Write("Searched first " + max + " Fibonacci numbers. Element " + n + " not found");
yield break;
)
if (b == n)
(
yield return b;
yield break;
)
int temp = b + c;
b = c;
c = temp;
)
)
)
Če spremenimo element elementToFind 1234, bo izhodni rezultat -
Pravila
1) Vsak element je treba vrniti enega po enega z uporabo izjave o donosu.
2) Vrsta vrnitve mora biti IEnumerable ali IEnumerator.
3) Ne morete ga uporabljati v ključnih besedah z donosom.
4) Ključne besede donosa ni mogoče uporabiti z izrazi Lambda ali Anonymous.
5) Izjava o donosu ne sme biti znotraj bloka poskusnega ulova. Lahko je znotraj preizkusnega bloka.
6) Izjava o prekinitvi donosa ne sme biti znotraj bloka poskusov. Lahko je znotraj bloka poskusnega ulova.
Prednosti
Ključna beseda donos prihrani potrebo po ustvarjanju začasnih zbirk. Za shranjevanje podatkov pred vrnitvijo iz metode vam ni treba ustvariti začasnih zbirk. Tudi stanje izvedbe metode se ohrani, zato je ni treba izrecno shraniti v kodo.
Zaključek - Donosna ključna beseda v C #
Iz tega članka smo izvedeli, da je ključna beseda zelo koristna ključna beseda v C #. Pomaga kodirati zapletene težave s čim manj vrsticami in tudi olajša razumevanje kode. To je bil članek na napredni ravni o potovanju C #. Priporočljivo je, da poskusite in uporabite ključno besedo v kodi, da boste imeli nekaj praktične prakse.
Priporočeni članki
To je vodnik za ključno besedo donosa v C #. Tukaj razpravljamo o tem, kako doseči, da ključne besede delujejo v C # s primeri, prednostmi in pravili. Če želite izvedeti več, si oglejte tudi naslednji članek -
- Prevlado v C #
- Prostori imen v C #
- Kazalci v C #
- Destruktor v C #
- PHP Ključne besede
- Iterator na Javi
- Delo in top 3 metode Enum v C #
- Serija Fibonaccije V JavaScript s primeri
- Celoten vodnik za Destruktor v PHP