Introduzione alla parola chiave resa in C #

Resa è una parola chiave contestuale in C #. Le parole chiave contestuali sono quelle parole chiave in C # che non sono riservate al programma completo. Piuttosto sono parole chiave riservate per alcune parti del programma in cui la parola chiave può essere utilizzata in modo pertinente. Queste parole chiave possono essere utilizzate come identificatori validi laddove la loro rilevanza non trasmetta alcun significato speciale al compilatore.

La parola chiave yield indica che il metodo o l'accessor contenente la parola chiave è un metodo / accessor iteratore. Un metodo / accessorio iteratore è uno che non restituisce un singolo valore. Piuttosto, viene chiamato nelle iterazioni e restituisce valori diversi in ciascuna iterazione.

Sintassi

La sintassi della parola chiave yield è piuttosto semplice. Devi semplicemente specificare la parola chiave prima dell'istruzione return del metodo o dell'accessor.

yield return ;

O

yield break;

Queste sono le due implementazioni della parola chiave. Se utilizzata con un'istruzione return, la parola chiave yield restituisce il valore successivo calcolato dall'espressione, fino a quando non viene soddisfatta la condizione di uscita dell'espressione. Se utilizzata con la parola chiave break, la parola chiave yield interrompe l'iterazione e l'esecuzione del programma esce dal metodo / accessorio.

Come funziona la parola chiave Yield in C #?

  1. Quindi, come funziona la parola chiave in C #? Qual è l'implementazione interna della parola chiave nel compilatore C #? Capiamo Il metodo contenente la parola chiave yield può essere utilizzato da un ciclo iteratore come foreach o LINQ query. Ogni iterazione del ciclo effettua una chiamata al metodo. Il codice nel metodo viene eseguito fino a quando non viene rilevata un'istruzione return return o yield break.
  2. La posizione corrente dell'esecuzione nel metodo viene mantenuta e la successiva iterazione continua da dove era stata interrotta nella precedente iterazione.
  3. Era semplice, no? Entriamo nell'implementazione tecnica dello stesso. Il metodo contenente la parola chiave yield deve sempre restituire un IEnumerable o IEnumerator. Ogni volta che il compilatore incontra la parola chiave yield, sa che il metodo viene utilizzato da un iteratore. Quando viene chiamato il metodo, il compilatore non esegue il corpo del metodo come normalmente.
  4. Piuttosto esegue il corpo del metodo e restituisce un set compilato di IEnumerables alla variabile iteratore che consuma. Ad ogni chiamata del metodo, il compilatore cerca una dichiarazione di rendimento e mette in pausa l'esecuzione a tale istruzione. La successiva iterazione del ciclo continua l'esecuzione dall'ultima posizione in pausa. Questo continua fino alla condizione di uscita del loop o ad una dichiarazione di break di rendimento. Per memorizzare le informazioni sullo stato dopo ogni iterazione, il compilatore crea una macchina a stati.

Esempi di parole chiave di rendimento in C #

Consideriamo alcuni esempi:

Esempio n. 1 - Metodo

L'esempio seguente genera la serie Fibonacci usando la parola chiave yield.

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;
)
)
)

Esempio n. 2 - Accessore

L'esempio seguente utilizza la parola chiave yield con un accessor get.

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; )
)
)

Esempio n. 3 - pausa di rendimento

L'esempio seguente mostra l'uso dell'istruzione break yield. L'iterazione termina non appena viene trovato un numero nella serie o viene raggiunto il limite massimo di ricerca.

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;
)
)
)

Se cambiamo elementToFind 1234, l'output sarà -

Regole

1) Ogni elemento deve essere restituito uno alla volta utilizzando l'istruzione return return.
2) Il tipo restituito deve essere IEnumerable o IEnumerator.
3) Non è possibile utilizzarlo in, ref o out parole chiave con rendimento.
4) La parola chiave di rendimento non può essere utilizzata con espressioni Lambda o metodi anonimi.
5) Una dichiarazione di rendimento non può trovarsi all'interno di un blocco try-catch. Può essere all'interno di un blocco try-finally.
6) Un'istruzione break yield non può essere all'interno di un blocco try-finally. Può trovarsi all'interno di un blocco try-catch.

vantaggi

La parola chiave yield risparmia la necessità di creare raccolte temporanee. Non è necessario creare raccolte temporanee per archiviare i dati prima che vengano restituiti dal metodo. Inoltre, lo stato di esecuzione del metodo viene mantenuto e pertanto non è necessario memorizzarlo in modo esplicito nel codice.

Conclusione - Parola chiave resa in C #

Da questo articolo abbiamo appreso che come produrre parole chiave è una parola chiave molto utile in C #. Aiuta a codificare problemi complessi con il minor numero di righe possibile e rende anche il codice di facile comprensione. Questo era un articolo di livello avanzato sul viaggio in C #. Si consiglia di provare a utilizzare la parola chiave nel codice in modo da ottenere alcune esercitazioni pratiche.

Articoli consigliati

Questa è una guida alla parola chiave resa in C #. Qui discutiamo di come produrre parole chiave funziona in C # con esempi, vantaggi e regole. Puoi anche leggere il seguente articolo per saperne di più -

  1. Sostituzione in C #
  2. Spazi dei nomi in C #
  3. Puntatori in C #
  4. Distruttore in C #
  5. Parole chiave PHP
  6. Iteratore in Java
  7. Lavorare e primi 3 metodi Enum in C #
  8. Serie Fibonacci in JavaScript con esempi
  9. Guida completa a Destructor in PHP

Categoria: