Увод у кључну реч приноса у Ц #

Принос је контекстуална кључна реч у Ц #. Контекстуалне кључне речи су оне кључне речи у Ц # које нису резервисане за цео програм. Уместо да су то резервисане кључне речи за одређене делове програма у којима се кључна реч може релевантно користити. Ове кључне речи могу се користити као валидни идентификатори где год њихова релевантност не преноси никакво посебно значење преводиоцу.

Кључна реч приноса означава да је метода или приступник који садржи кључну реч итераторски метод / приступник. Метод / приступник итератора је онај који не враћа ниједну вриједност. Уместо тога, зове се у итерацијама и враћа различите вредности у свакој итерацији.

Синтакса

Синтакса кључне речи у приносу је прилично једноставна. Једноставно морате навести кључну реч пре повратне изјаве методе или приступа.

yield return ;

ИЛИ

yield break;

Ово су две имплементације кључне речи. Када се користи са повратном изјавом, кључна реч приноса враћа следећу вредност израчунату из израза, док се не испуни излазни услов израза. Када се користи са кључном речју прекида, кључна реч приноса прекида итерацију и извршавање програма излази из методе / приступа.

Како функционише кључна реч приноса у Ц #?

  1. Па, како реч кључна реч у Ц #? Која је унутрашња имплементација кључне речи у Ц # преводиоцу? Да разумемо. Метода која садржи кључну реч приноса може конзумирати петља итератора као што је фореацх или ЛИНК упит. Свака итерација петље позива на методу. Код у методи се извршава све док се не нађе изјава о приносу или прекиду приноса.
  2. Тренутна позиција извршења у методи је задржана и следећа итерација се наставља тамо где је прекинута у претходној итерацији.
  3. Ово је било једноставно, зар не? Идемо у техничку имплементацију истог. Метода која садржи кључну реч приноса мора увек да врати ИЕнумерабле или ИЕнумератор. Кад год преводилац наиђе на кључну реч, он зна да метод користи итератор. Када се метода позове, преводилац не извршава тело методе као што то обично чини.
  4. Уместо тога извршава тело методе и враћа састављени скуп ИЕнумераблес у променљиву итератора која троши. При сваком позиву методе, преводилац тражи изјаву о приносу и зауставља извршење те изјаве. Следећа итерација петље наставља извршење са последње паузиране локације. То се наставља све док се не изађе стање излаза петље или изјава о прекиду приноса. Да би сачувао информације о стању након сваке итерације, преводилац креира државну машину.

Примери кључне речи у приносу у Ц #

Размотримо неколико примера:

Пример # 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 - Приступник

Следећи пример користи приносну реч са приступом гет.

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

Ако променимо елементТоФинд 1234, излаз ће бити -

Правила

1) Сваки елемент мора бити враћен један по један користећи изјаву приноса.
2) Врста повратка мора бити ИЕнумерабле или ИЕнумератор.
3) Не можете га користити у, реф, или издвојити кључне речи са приносом.
4) Кључна реч приноса не може се користити са Ламбда изразима или анонимним методама.
5) Изјава о приносу не може бити унутар блока покушаја хватања. То може бити у блоку који покушава.
6) Изјава о прекиду приноса не може бити унутар блока покушаја коначно. То може бити унутар блока покушаја хватања.

Предности

Кључна реч приноса штеди потребу за стварањем привремених колекција. Не морате да креирате привремене колекције за чување података пре него што се исти врате из методе. Такође, стање извршења методе се задржава и стога није потребно експлицитно чувати у коду.

Закључак - кључна реч приноса у Ц #

Из овог чланка смо сазнали да је доношење кључне речи врло корисна кључна реч у Ц #. Помаже кодирање сложених проблема са што је могуће мање редака, а код чини лако разумљивим. Ово је чланак на напредном нивоу о путовању Ц #. Препоручује се испробати и користити кључну реч у коду како бисте стекли неку практичну праксу.

Препоручени чланци

Ово је водич за кључну реч приноса у Ц #. Овдје смо расправљали о томе како искористити кључне ријечи у Ц # с примјерима, предностима и правилима. Такође можете погледати следећи чланак да бисте сазнали више -

  1. Превладавање у Ц #
  2. Простори с именима у Ц #
  3. Показивачи у Ц #
  4. Деструктор у Ц #
  5. ПХП Кључне речи
  6. Итератор на Јави
  7. Рад и топ 3 Енум методе у Ц #
  8. Серија Фибонацције у ЈаваСцрипт-у са примерима
  9. Комплетан водич за Деструктор у ПХП-у

Категорија: