Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_theory_Ris_1g__Zachita.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
666.83 Кб
Скачать

18. Кортеждер. Құрылымдық салыстыру.

Массивтер бір типті объектілерді жүйелесе, кортеждер әр түрлі типті объектілерді жүйелей алады. .NET 4-те кортеждердің фабрикасы қызметін атқаратын сегіз Tuple жалпылама классы және Tuple бір статистикалық классы анықталған. Әр түрлі мөлшерлі элементті қолдайтын Tuple жалпылама класстары әр түрлі болады: Tuple<T1> бір элементті, Tuple<T1, T2> екі элементтен тұрады.

Divide() методы кортеждің екі мүшесінің қайтуын көрсетеді - Tuple<int,int>. Жалпылама класстың параметрі мүшелердің типін анықтайды, біздің жағдайда екеуі де бүтін сан. Кортеж Tuple статистикалық классының Create() статистикалық методымен жасалған. Create() методының жалпылама параметрлері кортеждің жасалынып жатқан экземплярының типін анықтайды. Қайта жасалынған кортеж бөлінгіш нәтижесін қайтару үшін result және reminder айнымалыларымен инициализацияланады.

Public static<int,int> Divide(int dividend, int divisor)

{

Int result=dividend/divisor;

Int reminder=dividend%divisor;

Return Tuple.Create<int,int>(result,reminder);

}

Келесі кодта Divide() методын шақыру көрсеілген. Кортеж элементтері Item1 және Item2 ерекшеліктері арқылы ғана қолжетімді.

Var result=Divide(5,2);

Console.WriteLine(“resultat delenia: {0}, ostatok:{1}”,

Result.Item1, result.Item2);

Кортежге енгізілетін элемент саны сегізден көп болған жағдайда сегіз параметрлі Tuple классының анықтамасын қолдануға болады. Кортеждің өзі берілетін соңғы параметр TRest деп аталады. Осылайша параметр санына шектеусіз кортеждер жасауға болады.

Бұл функционалдылықты көрсету үшін келесідей код жазамыз:

Public class Tuple<T1,T2,T3,T5,T6,T7,TRest>

Мұнда шаблонның соңғы параметрі кортеждің типі болып табылады, осылайша кез келген көлемді кортеж жасауға болады:

Var tuple=Tuple.create<string,string,string,int,int,int,double,

Tule<int,int>>(“Stephanie”,”Alina”,”Nagel”,2009,6,2,1,37,

Tuple.create<int,int>(52,3490));

Құрылымдық салыстыру

Массивтер сияқты кортеждер де IStructuralEquatable және IStructuralComparable интерфейстерін жүзеге асырады. Бұл интерфейстер .NET 4-те пайда болды және сілтемелерді ғана емес, сондайақ оның ішіндегілерді де салыстыруға мүмкіндік береді. Интерфейс айқын жүзеге асырылады, сондықтан оны қолдану кезінде массивтер мен кортеждердің келуін іске асыру керек. IstructuralEquatable екі кортеж немесе кортеждің ішіндегілер бірдей ма соны анықтайды, ал IstructuralComparable кортеждер мен массивтерді сорттау үшін пайдаланылады. КЕлесі мысалда IstructuralEquatableдың қолданылуын көрсететін, lEquatable интерфейсі іске асырылатын Person классы құрылған. Бұл интерфейс FirstName және LastNAme ерекшеліктерін салыстыратын Equals() типталған методын анықтайды:

Төменде Person элементтерінің екі массиві құрылады. Екеуі де бірдей Person объектісінен тұрады, ол janet есімді айнымалы және ішіндегі әр түрлі болатын Person екі түрлі объектісінен тұрады. != салыстыру операциясы true қайтарады, себебі бұлар persons1 және persons2 екі айнымалысы сілтелінетін екі түрлі массив. Equals() методы бірпараметрлі және Array классымен қайта анықталатын болғандықтан, == операциясымен де осындай жағдай болады, сілтемелерді салыстыранда олар сәйкес келмейді.

Equals() методын шақырғанда, IstructuralEquatable анықтауды қабылдайтын object типті бірінші параметрі және екінші IstructuralComparable типті параметр салыстыру қалай жүретіні туралы анықтайтынын көрсетеді. IstructuralComparable іске асырылуы EqualityComparer<T> классы бойынша көрсетіледі. Онда IEquatable іске асыралама жоқ па тексеру жүргізіледі де, IEquatable.Equals() шақырылады. Егер тип IEquatable іске асырмаса, онда салыстыру үшін object класының Equals() методы шақырылады.

Person классы IEquatable<Person> іске асырады, онда объектілер салыстырылады және массивтер шынымен де бірдей объектілерден тұратындығы анықталады:

Енді осыларды кортеждерді енгізу арқылы қалай жасауға болатыны жайлы көрсетіледі. Төменде бірдей объектілі кортеждердің екі экземпляры құрылады. Әрине T1 және t2 сілтемелері екі түрлі объектіге сілтегендіктен != салыстыру операциясы true қайтарады:

Tuple<> классы Equals() екі методын ұсынады: біріншісі object класынан параметр негізінде Object базалық класынан іске асыруды қайта анықтайтын, екнішісі object және IEqualityComparer параметрлі IStructuralEqualityComparer интерфейсі арқылы анықталған. Көрсетілгендей басқа кортеж бірінші методқа берілуі мүмкін. Осылайша кортеждегі әрбір элемент Object.Equals() методын шақыру негізінде салыстырылады. Егер әрбір элементке true қайтарылатын болса, Equals() методының соңғы нәтижесі де true болады:

Сондайақ төменде көрсетілген TupleComparer классының мысалында IEqualityComparer арнайы интерфейсін құруға болады. Бұл класста IEqualityComparer интерфейстің екі метод іске асыралған: Equals() және GetHashCOde() .

IEqualityComparer интерфейстің Equals() методын іске асыру үшін new модификаторы немесе айқын емес интерфейсті іске асыруы қажет, ссебебі Object базалық класы екі параметрлі Equals() статистикалық методын анықтайды.

19. C#-тағы операциялар. Мәндер типімен және сілтемелермен жұмыс жасау кезіндегі эквиваленттілік идеясы.

C# тілінде орындалатын операциялар:

Категориялар

Операциялар

Арифметикалық

+ - * / %

Логикалық

& | ^ ~ && || !

Өріс конкотенциясы

+

Инкремент және декремент

++ --

Биттік жылжыту

<< >>

Салыстыру

== != <> <= =>

Меншіктеу

= += -= *= /= %= &= |= ^= <<= >>=

Мүшеге қол жетімділік

.

Индексациялау

[]

Келтіру

()

Объект құру

New

Тип туралы ақпарат

Size of tupe as

C# операцияларын қолданған кезде абай болатын жағдайлар болады. C# тілінде басқаларда сияқты меншіктеу (=) және салыстыру(==) операциялары орындалады. Мысалы келесі оператор х үшке тең дегенді білдіреді:

x=3;енді егер сіз хті салыстырғыңыз келсе, онда сіз қос теңдік == белгісін қолдануыңыз керек:

If (x==3)

{

}

C# тілінде жұмыс істеуді жеңілдету мақсатында операцияларды қысқарту қолданылады:

Шартты операциялар

Шартты операторлар (?:) немесе тернарлы деп те аталады, ол if…else операторының қысқартылған түрі. Ол үш операндпен жұмыс істейді. Бұл операция есептеп шығарып, бір жауапты таңдайды. Шарт дұрыс немесе дұрыс еместігін анықтайды.

Chiced unChiced операциялары. Бұл операторлар қателіктің жоқ екендігін тексеруге арналған операциялар болып табылады.

Is операциясы объект берілген типке сәйкестігін тексереді.

as операциясы Сілтемелі айнымалар типтерін қайта жасау үшін арналған операция.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]