Unar hám binar operatorlardı qayta júklew



Yüklə 27,57 Kb.
tarix27.07.2023
ölçüsü27,57 Kb.
#137650
Unar hám binar operatorlardı qayta júklew


Unar hám binar operatorlardı qayta júklew.
C# de unar hám ekilik operatorlar hádden tıs júkleniwi múmkin, yaǵnıy olardıń minez-qulqları arnawlı túrler ushın anıqlanıwı múmkin. Operator gilt sózi
artıqsha júklengen operatorlardı anıqlaw ushın isletiledi. Unar operatorlar bir operandda, ekilik operatorlar bolsa eki operandda isleytuǵın operatorlar bolıp tabıladı. C# tilinde unar operatorlarǵa logikalıq NO (!) hám teris (-) operatorlar kiredi, ekilik operatorlarǵa bolsa qosıw (+), ayırıw (-) hám salıstırıwlaw (==)
operatorları kiredi.
C# de birlik hám ekilik operatorlardı hádden tıs júklegende, ámel qılıw kerek
bolǵan málim kórsetpeler ámeldegi: Birlik operatorlar anıqlanıp atırǵan tur menen birdey túrdegi bir operandni alıwları hám birdey túrdegi nátiyjeni qaytarıwları kerek. Ekilik operatorlar eki operandni alıwları kerek, keminde bir operand anıqlanǵan túrdegi bolıwı kerek. Operator birdey túrdegi nátiyjeni qaytarıwı kerek.
Hádden tıs júklengen operatorlar statikalıq usıllar bolıwı kerek.
Tómendegi mısalda arnawlı ComplexNumber klası ushın unar biykar operatorınıń (-) artıqsha júkleniwi kórsetilgen:
public class ComplexNumber
{public double Real { get; set; }
public double Imaginary { get; set; }
public static ComplexNumber operator -(ComplexNumber c)
{return new ComplexNumber { Real = -c.Real, Imaginary = -c.Imaginary };
Bul kod ComplexNumber klassi mısalları ushın unar biykar operatorınıń (-) háreketin belgileydi. Operator ComplexNumber tipidagi bir operandni aladı hám onıń haqıyqıy hám qıyalıy bólimleri biykar etilgen halda jańa ComplexNumber mısalın qaytaradı.
Tómendegi mısalda arnawlı Money klası ushın ekilik qosıw operatorınıń (+) artıqsha júkleniwi kórsetilgen:
public class Money
{
public decimal Amount { get; set; }
public static Money operator +(Money m1, Money m2)
{
return new Money { Amount = m1.Amount + m2.Amount };
Bul kod Money klası mısalları ushın ekilik qosıw operatorınıń (+) háreketin belgileydi. Operator Money tipidagi eki operandni aladı jáne onıń Amountózgesheligi operandlarning Summa ózgeshelikleri jıyındısına ornatılǵan jańa Money mısalın qaytaradı.
Juwmaq etip aytqanda, C# de unar hám ekilik operatorlardı hádden tıs júklew arnawlı túrlerge bul operatorlar ushın óz minez-qulqların anıqlaw imkaniyatın beredi, bul olardı kodta paydalanıw ushın jáne de maslasıwshı hám intuitiv etedi. Usıllar menen bir qatarda biz operatorlardı artıqsha júklewimiz de múmkin.
Mısalı, bizde tómendegi Counter klassi bar deylik:
class Counter
{
public int value { get; set; }
}
Bul klass birpara esaplagichlarni ańlatadı, olardıń ma`nisi value ózgeshelikinde
saqlanadı. Aytaylik, bizde esaplaǵısh klasınıń eki ob'ekti bar - biz olardı salıstırıw yamasa qosıw qálegen eki esaplagichni value ózgesheligi tiykarında standart salıstırıwlaw hám qosıw operatsiyaları járdeminde:
Counter c1 = new Counter { value = 23 };
Counter c2 = new Counter { value = 45 };
bool result = c1 > c2;
Counter c3 = c1 + c2;
Biraq házirgi waqıtta Counter úskeneleri ushın na salıstırıwlaw operatsiyası, na qosıw operatsiyası joq. Bul operatsiyalar bir qatar baslanıwiy túrleri ushın isletiliwi múmkin. Mısalı, únsizlik boyınsha biz cifrlı bahalardı qosıwımız múmkin, biraq kompilyator quramalı túrdegi ob'ektler - klasslar hám strukturalardı qanday qosıwdı bilmaydi. hám onıń ushın biz kerekli operatorlardı artıqsha júklewimiz kerek. Operatordıń artıqsha júkleniwi biz operatordı anıqlawshı bolǵan ob'ektler
ushın klassta arnawlı usıldı belgilewden ibarat :
public static qaytarıw_tip operator operator (parametrler)
{ }
Bul usıl ulıwma statikalıq modifikatorlarga ıyelewi kerek, sebebi haddan tısqarı júklengen operator bul klasstıń barlıq ob'ektleri ushın isletiledi. Keyingi qaytıw turining atı. Qaytıw túri biz ob'ektlerdi alıwdı qálegen turni ańlatadı. Mısalı, eki Counter úskenesin qosıw nátiyjesinde biz jańa Counter úskenesin alıwdı kútip atırmız. hám ekewin salıstırıwlaw nátiyjesinde biz bool tipidagi ob'ektti alıwdı qáleymiz, bul shártli ańlatpa tuwrı yamasa ótirik ekenligin kórsetedi. Biraq wazıypaǵa qaray, qaytarıw túrleri hár qanday bolıwı múmkin.
Keyin usıl atı ornına operator gilt sózi hám operatordıń ózi bar. hám keyin parametrler qawıs ishinde keltirilgen. Ekilik operatorlar eki parametrdi, unaryali operatorlar bir parametrdi aladı. hám hár qanday jaǵdayda, parametrlerden biri operatordı anıqlaytuǵın klass yamasa strukturanı - túrin kórsetiwi kerek. Mısalı, Counter klassi ushın bir qatar operatorlardı artıqsha júkleylik:
class Counter
{
public int Value { get; set; }
public static Counter operator +(Counter c1, Counter c2)
{
return new Counter { Value = c1.Value + c2.Value };
}
public static bool operator >(Counter c1, Counter c2)
{
return c1.Value > c2.Value;
}
public static bool operator <(Counter c1, Counter c2)
{
return c1.Value < c2.Value;
}
}
Barlıq artıqsha júklengen operatorlar ekilik bolǵanlıǵı sebepli, yaǵnıy olar eki ob'ekt ústinde atqarıladı, keyin hár bir artıqsha júk ushın eki parametr boladı. Qosıw ámelinde biz Counter klasınıń eki úskenesin qosıwchimiz, operator sol klasstıń eki ob'ektin aladı. Qosıw nátiyjesinde biz jańa Counter ob'ektin alıwdı qálegenimiz ushın, bul klass qaytıw túri retinde de isletiledi. Bul operatordıń barlıq háreketleri value ózgesheligi eki parametrdiń value
ózgeshelikiniń bahaların birlestirgen jańa ob'ektti jaratılıwma qısqartiriladi:
public static Counter operator + (Counter c1, Counter c2)
{
return new Counter { value = c1. value + c2. value };
}
Eki salıstırıwlaw operatorları da qayta anıqlandi. Eger biz bul salıstırıwlaw operatsiyalarınan birin biykar qilsak, ol jaǵdayda biz bul operatsiyalardıń ekinshisin da bıykarlawımız kerek. Salıstırıwlaw operatorları ózleri value qásiyetleriniń bahaların salıstırıwlaydilar hám salıstırıwlaw nátiyjelerine qaray " true" yamasa " false" bahaların qaytaradılar.
Endi biz programmada artıqsha júklengen operatorlardan paydalanamız :
using System;
namespace Qayta
{
class Counter
{
public int Value { get; set; }
public static Counter operator +(Counter c1, Counter c2)
{
return new Counter { Value = c1.Value + c2.Value };
}
public static bool operator >(Counter c1, Counter c2)
{
return c1.Value > c2.Value;
}
public static bool operator <(Counter c1, Counter c2)
{
return c1.Value < c2.Value;
}
}
class Program
{
static void Main(string[] args)
{
Counter c1 = new Counter { Value = 23 };
Counter c2 = new Counter { Value = 45 };
bool result = c1 > c2;
Console.WriteLine(result); // false
Counter c3 = c1 + c2;
Console.WriteLine(c3.Value); // 23 + 45 = 68
Console.ReadKey();
}
}
}

Sonısı itibarǵa ılayıqki, tiykarınan operatordıń tariypi bul usıl eken, biz bul usıldı artıqsha júkley alamız, yaǵnıy onıń ushın basqa versiyasın jaratamız. Mısalı, Counter klasına basqa operator qosaylik:


public static int operator + (Counter c1, int val)
{
return c1. value + val;
}
Bul usıl value ózgesheligi hám sanın qosıp, olardıń jıyındısın qaytaradı. hám
biz bul operatordan da paydalanıwımız múmkin:
Counter c1 = new Counter { value = 23 };
int d = c1 + 27; // 50
Console. WriteLine (d);
Sonı esta saqlaw kerek, artıqsha júk waqtında operatorǵa parametrler arqalı uzatılatuǵın ob'ektler ózgertirilmasligi kerek. Mısalı, biz Counter klassi ushın ósiw operatorın anıqlay alamız :
Public static Counter operator ++ (Counter c1)
{
c1. value += 10 ;
return c1;
}
Operator unary bolǵanı ushın ol tek bir parametrdi aladı - bul operator anıqlanǵan
klass ob'ekti. Biraq bul ósiwdiń nadurıs tariypi, sebebi operator óz parametrleri bahaların ózgertirmasligi kerek.


Yüklə 27,57 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin