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


 IEnumerable стандартты интерфейсін қолдану



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

11.3 IEnumerable стандартты интерфейсін қолдану 
Бір қарағанда интерфейстік класты енгізудің артықшылықтары жоқ 
болып кӛрінеді – кодтау, декодтау әдістерін тікелей MyzikText класына
орналастыруға болады.
.NET платформасының кітапханасындағы кластарда әр түлі 
интерфейстердің интерфейстік әдістерінің кӛптеген саны бар, оларды класс 
мұраланып қосымша қасиеттерге ие болады (әдістердің орындалуы арқылы 
емес, олардың атаулары арқылы). Әдетте әрбір интерфейстік класс 
интерфейстік әдістерді жүзеге асыруын ӛзі орындауы керек. 
Мысалы, егер класта foreach циклінің кӛмегімен кейбір массив түрінде 
берілген тізімдеулі объекттерді қарап шығуды ұйымдастыру керек болса


онда біздің класс IEnumerable (тізімдеулі, перечислимый) интерфейсінің 
мұрагері болуы керек. Осы интерфейстің бір ғана GetEnumerator() әдісі 
болады және осы әдіс Enumerator
 
(тізімдеуші, перечислитель) типіндегі 
объекті қайтарады. GetEnumerator() әдісінің жазылу пішімі келесі түрде 
болады: 
IEnumerator GetEnumerator(); 
Сонымен, осы клас IEnumerable және IEnumerator интерфейстерінің 
мұрагері болуы керек.
IEnumerator интерфейсінің тізімделген кезекті объекті қайтаратын 
Object Current{get;} деген бір қасиеті және екі әдісі болады. Bool MoveNext() 
әдісі тізімдеушіні келесі тізімделген объектке жылжытады, void Reset() әдісі 
тізімдеушіні бірінші тізімделген объектке орнатады.
Жоғарыда келтірілген қасиет пен екі әдіс Foreach циклінің кӛмегімен 
массив объекттерін қарап шығу процессін ұйымдастыруға мүмкіндік береді. 
Осы интерфейстердің әдістері виртуалды коллекциямен жұмыс жасайды 
және осы жағдай олардың әмбебаптығын анықтайды.
Егер класта объекттерді салыстыру керек болса, мысалы, объекттерді 
сұрыптау керек болса, онда ондай класты IComparable интерфейсінің 
мұрагері етіп жариялау керек. Осы интерфейстің бір ғана әдісі болады - 
CompareTo(object obj), ол әдіс "үлкен", "кіші" немесе "тең" қатынастарының 
орындалуына байланысты оң, теріс немесе нӛлге тең бүтін санды қайтарады. 
IEnumerable және IEnumerator интерфейстерімен жұмыс жасауды 
қарастырайық. Осы мысал бойынша дүкендегі тауарларды қарап шығуды 
ұйымдастыру керек. Tovar класының екі ӛрісі болады – тауардың атауы және 
оның бағасы.
class Tovar 

public string Naz; // Тауардың атауы мен бағасы
public int Cena
public Tovar(string n, int c) // Конструкор

Naz = n; Cena = c; 

}
Tovar типіндегі объекттерді сақтау үшін Cklad класын қолданамыз, 
құрылымы мынандай:
class Cklad 

public Tovar[] tovar; // тауарлар массиві 
public Cklad() // қойма конструкторы 

tovar = new Tovar[4]; 

}
Қоймада сақтауға болатын объекттердің максималь саны 4-ке тең.
Қосымшада IEnumerable интерфейсін қолданбаймыз.


Form1.cs файлының коды: 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
namespace WindowsApplication1 

public partial class Form1 : Form 

public static string s
public static int kol; 
class Tovar 

public string Naz; // Тауардың атауы мен бағасы
public int Cena; 
public Tovar(string n, int c) // Конструкор
{Naz = n; Cena = c; 


class Cklad 

public Tovar[] tovar; // Тауар бойынша массив 
public Cklad() // қойма конструкторы 

tovar = new Tovar[4]; 


public Form1() 
{ InitializeComponent(); 
kol = 0; 
s = ""; 

Cklad ckl = new Cklad(); 
private void button2_Click(object sender, EventArgs e) 

if (kol < 4) 

ckl.tovar[kol] = new Tovar(textBox1.Text, 
Convert.ToInt32(textBox2.Text)); 
s = s + textBox1.Text + textBox2.Text + "\r\n"; 

else { s = s + "Қойма толды" + "\r\n"; kol--; } 
kol++; 
textBox3.Text = s; 

private void button1_Click(object sender, EventArgs e) 

s = ""; 
s = "foreach циклінің жұмысы" + "\r\n"; 
foreach (Tovar t in ckl.tovar) 



s = s + t.Naz + " " + t.Cena.ToString() + "\r\n"; 

s = s + "for цикл жұмысы" + "\r\n"; 
for (int i = 0; i < kol; i++) 

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

textBox3.Text = s; 



Бағдарлама жұмысы 11.2-суретте кӛрсетілген. 
11.2-сурет – Қосымшаның интерфейстерсіз жұмысы 
Айта кететін жәйт, қосымшада foreach циклі массив типіндегі ckl.tovar 
айнымалысы үшін ғана қолданылады, айнымалының кіріктірілген интерфейсі 
бар. 
Бірақ, егер біз foreach циклін Cklad класс объектісінің tovar массиві 
үшін емес, Tovar класының объекттері үшін қолданатын болсақ, мысалы
foreach (Tovar t in ckl)

s = s + t.Naz + " " + t.Cena.ToString() + "\r\n";


 }
,
онда, компилятор қосымшада кеткен қателік туралы хабарлама 
шығарады:
«
foreach statement cannot operate on variables of type ' 
WindowsFormsApplication1.Form1.Cklad ' because 'Books' does not 
contain a public definition for 'GetEnumerator'» 
(


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




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

    Басты бет