Въведение в ключовата дума за доходност в C #

Добивът е контекстуална ключова дума в C #. Контекстуалните ключови думи са онези ключови думи в C #, които не са запазени за цялата програма. По-скоро те са запазени ключови думи за определени части от програмата, където ключовата дума може да бъде подходящо използвана. Тези ключови думи могат да бъдат използвани като валидни идентификатори, когато тяхната уместност не носи специално значение на компилатора.

Ключовата дума за добив показва, че методът или достъпът, съдържащ ключовата дума, е метод на итератор / аксесоар. Методът / итераторът на итератор е този, който не връща нито една стойност. По-скоро се извиква в итерации и връща различни стойности във всяка итерация.

Синтаксис

Синтаксисът на ключовата дума за добив е доста прост. Просто трябва да посочите ключовата дума преди изявлението за връщане на метода или аксесоара.

yield return ;

ИЛИ

yield break;

Това са двете реализации на ключовата дума. Когато се използва с оператор за връщане, ключовата дума за доходност връща следващата стойност, изчислена от израза, докато не бъде изпълнено условието за изход на израза. Когато се използва с ключовата дума break, ключовата дума добив прекъсва итерацията и изпълнението на програмата излиза от метода / аксесоара.

Как работи ключовата дума за доходност в C #?

  1. И така, как се казва ключовата дума в C #? Каква е вътрешната реализация на ключовата дума в компилатора C #? Нека да разберем. Методът, съдържащ ключовата дума за добив, може да бъде консумиран от итераторски цикъл, като foreach или LINQ заявка. Всяка итерация на цикъла прави повикване към метода. Кодът в метода се изпълнява, докато не се срещне декларация за възвръщаемост или прекъсване на добива.
  2. Текущата позиция на изпълнението в метода се запазва и следващата итерация продължава от мястото, където тя е прекъсната в предишната итерация.
  3. Това беше просто, нали? Нека да влезем в техническото изпълнение на същото. Методът, съдържащ ключовата дума за добив, трябва винаги да връща IEnumerable или IEnumerator. Всеки път, когато компилаторът срещне ключовата дума за добива, той знае, че методът се консумира от итератор. Когато методът се извика, компилаторът не изпълнява тялото на метода, както обикновено.
  4. По-скоро той изпълнява тялото на метода и връща компилиран набор от IEnumerables на консумиращата променлива итератор. При всяко повикване на метода компилаторът търси декларация за доходност и спира изпълнението на този оператор. Следващата итерация на цикъла продължава изпълнението от последното поставено на пауза място. Това продължава, докато състоянието на изхода на цикъла или декларацията за прекъсване на добива. За да съхранява информацията за състоянието след всяка итерация, компилаторът създава държавна машина.

Примери за ключова дума за доходност в C #

Нека разгледаме някои примери:

Пример №1 - Метод

Примерът по-долу генерира серията Фибоначи, използвайки ключовата дума за добив.

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

Пример №2 - Аксесоар

Следващият пример използва ключовата дума за добив с get accessor.

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

Пример №3 - прекъсване на добива

Следващият пример демонстрира използването на декларацията за прекъсване на добива. Итерацията се прекратява, след като бъде намерено число в серията или е достигната максималната граница на търсене.

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

Ако променим elementToFind 1234, изходът ще бъде -

правилник

1) Всеки елемент трябва да бъде върнат един по един, използвайки декларацията за възвръщаемост на добива.
2) Типът на връщане трябва да бъде IEnumerable или IEnumerator.
3) Не можете да го използвате в ключови думи с доходност, реф.
4) Ключовата дума за добив не може да се използва с Lambda изрази или анонимни методи.
5) Декларация за възвръщаемост на печалбата не може да бъде в блок за пробвания. Тя може да бъде вътре в блок с опит.
6) Декларация за прекъсване на добива не може да бъде в блок за изпробване. Може да бъде вътре в блок за пробвания.

Предимства

Ключовата дума за доходност щади необходимостта от създаване на временни колекции. Не е необходимо да създавате временни колекции, за да съхранявате данните, преди да бъдат върнати от метода. Също така състоянието на изпълнение на метода се запазва и по този начин не е необходимо изрично да се съхранява в кода.

Заключение - Ключова дума за доходност в C #

От тази статия научихме, че как да се получи ключова дума е много полезна ключова дума в C #. Той помага да се сложат проблеми с възможно най-малко редове и също така прави кода лесен за разбиране. Това беше статия на напреднало ниво за пътуването на C #. Препоръчва се да опитате и да използвате ключовата дума във вашия код, така че да получите практическа практика.

Препоръчителни статии

Това е ръководство за ключова дума за доходност в C #. Тук обсъждаме Как да се получи ключова дума работи в C # с примери, предимства и правила. Можете също да разгледате следната статия, за да научите повече -

  1. Повишаване в C #
  2. Пространства с имена в C #
  3. Указатели в C #
  4. Разрушител в C #
  5. PHP Ключови думи
  6. Iterator в Java
  7. Работа и топ 3 Enum методи в C #
  8. Серия Фибоначи в JavaScript с примери
  9. Пълно ръководство за Destructor в PHP