1. Интерфейс ұғымы



Pdf көрінісі
бет4/5
Дата05.05.2024
өлшемі381,76 Kb.
#201776
1   2   3   4   5
Байланысты:
11лекция

foreach 
операторын 
'WindowsFormsApplication1.Form1.Cklad' 
типіндегі айнымалыларда қолдануға болмайды, өйткені осы кластың 
айнымалыларында '
GetEnumerator' 
әдісінің айқын анықтамасы жоқ). 
Бағдарламаға керекті интерфейсті қосайық, ол үшін бағдарламаға 
қосымша атаулар кеңістігін қосу керек:
using System.Collections;
Cklad класы IEnumerable интерфейсін мұралануы керек: 
class Cklad : IEnumerable 
Cklad класының денесіне GetEnumerator әдісін қосу керек:
public IEnumerator GetEnumerator() 

for (int i = 0; i < 4; i++) yield return tovar[i]; 
}
Т.А.Павловскаяның кітабынан алынған кейбір түсініктемелерді бере 
кетейік [2]. 
«Сонымен, егер класс элементтерін бір бірден қарастыру үшін 
foreach
циклі қолданылған болса, онда GetEnumerator, 
Current, 
MoveNext, Reset төрт әдісін орындау керек. Мысалы, егер 
кластың ішкі элементтері массив түрінде ұйымдастырылған 
болса, онда кластың жабық өрісін сипаттау керек болады, 
онда ағымдағы индекс сақталады. MoveNext әдісінде 
индекстің өзгері 1-ге тең, массив шекарасынан асып кету 
шарты тексеріледі. Current әдісінде массив элементі 
ағындағы индекс бойынша қайтарылады және т.б. » 
Бұл қызықты жұмыс емес, бірақ оны жиі орындауға 
тура келеді, сондықтан 
2.0 версияда объекте бір бірден қарастыруды 
жеңілдететін құралдар – итераторлар енгізілген. 
Итератор дегеніміз – код блогы, онда объект элементтерін бір-бірден 
қарап шығу реттілігі анықталады. 
Foreach
циклінің әрбір қадамында 
итератордың бір қадамы орындалады, осының нәтижесінде 
yield
қызметтік сӛзі арқылы 
кезекті мән қайтарылады. 
2.0 версияда бір-бірден қарап шығуды орындау үшін – класта 
IEnumerable
интерфейсі орындалатының кӛрсету және итераторды 


сипаттау керек. Оған қол жеткізу 
IEnumerator
интерфейсінің 
MoveNext
және 
Current әдістері арқылы орындалады. 
foreach
циклінің әрбір қадамында итератор үшін «қоршам» - 
қызметтік объект әзірленеді, ол объект итератордың ағымдағы жағдайын 
сақтайды. Басқаша айтқанда, итераторды құраушы код үзіліссіз түрде 
орындалмайды, ол жеке итерацияларға бӛлінген және осы аралықтардың
арасында итератордың күйі сақталады.
Бағдарламада келтірілген екі ӛзгеріс 
foreach
циклін қолдануға 
мүмкіндік береді, алдынғы қарастырған жағдайда бұл 
циклды қолданған кезде қате кеткені туралы хабарламаны 
шығаратын.
Бағдарламаның 
«тұрып қалуына» себеп болатын 
foreach
циклінің жұмыс ерекшелігін ескере кету керек. Егер 
біздің бағдарламада тауардың бірнеше 
объекттерін енгізгеннен 
кейін, бірақ массив толық толмай тұрып, қоймадағы тауарларды қарап шығу 
режімін қосатын болсақ, онда бағдарлама жоқ мәндерді шығару кезінде 
«тұрып қалады», сондықтан foreach цикліндегі мәндерді бақылау керек. 
For циклінде мұндай кемшіліктер жоқ, өйткені ондағы 
ақырғы мән ағымдағы ауқымды kol айнымалысының мәнімен 
анықталады. 
for (int i = 0; i < kol; i++) 

s = s + ckl.tovar[i].Naz + " " + 
ckl.tovar[i].Cena.ToString() + "\r\n";



Достарыңызбен бөлісу:
1   2   3   4   5




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет