Programmēšana

Kā strādāt ar operatora pārslodzi C #

Polimorfisms ir viens no OOP (Object Oriented Programming) pamatprincipiem. Vārds polimorfisms ir atvasināts no diviem vārdiem - "poly", kas nozīmē daudzus, un "morph", kas nozīmē formas. Tādējādi polimorfisms nozīmē vienas un tās pašas lietas esamību, bet dažādās formās.

Operatora pārslodze ir statiskā polimorfisma piemērs. Varat izmantot operatora pārslodzi vai pievienot operatoriem funkcionalitāti, lai strādātu ar lietotāja definētiem tipiem līdzīgi kā ar pamata datu tipiem.

Kādi ir operatori un kādi ir tie operatori, kurus var pārslogot?

Izteiksmē jums parasti ir operatori un operandi. Operatori ir tie, kas strādā ar operandiem, un tie visi ir izteiksmes daļa. Šis piemērs ir izteiksme, kas satur divus operandus un vienu operatoru. Operandi ir X un Y, un operators ir +.

X + Y

Operatorus klasificē kā unāros, bināros, salīdzināšanas, piešķiršanas utt. Atkarībā no to mērķa un operandu skaita, kuros operatori darbotos. Lai gan lielāko daļu operatoru var pārslogot, tiek piemēroti noteikti ierobežojumi. Būtībā visus operatorus nevar pārslogot.

Operātori, t. I., Operatori, kas strādā ar vienu operandu, var būt pārslogoti. Varat arī pārslogot bināros operatorus un salīdzināšanas operatorus, piemēram, ==,! =,, =. Tomēr jūs nevarat pārslogot =,?, ->, new, is, sizeof vai typeof operatorus. Jūs nevarat arī pārslogot nosacītos operatorus, piemēram, && un || viegli. Arī masīva indeksēšanas operatoru [] nevar pārslogot.

Šajā MSDN rakstā varat uzzināt vairāk par visu operatoru pārslodzi.

Operatora pārslodze C #

Šajā sadaļā mēs izpētīsim, kā mēs varam ieviest operatora pārslodzi C #. Apsveriet šādu klasi ar nosaukumu DistanceCalculator.

publiskās klases DistanceCalculator

   {

Int32 pēdas = 0, collas = 0;

publiskais DistanceCalculator (Int32 pēdas = 0, Int32 collas = 0)

       {

tas.pēdas = pēdas;

this.inch = collas;

       }

   }

Skatiet iepriekš minēto kodu sarakstu. Klase DistanceCalculator satur divus Int32 tipa datu dalībniekus, proti, pēdas un collas. Tagad mēs šai klasei pievienotu vairāk metožu, lai parādītu, kā operatorus var pārslogot.

Strādājot ar operatora pārslodzi, jums jāpatur prātā daži punkti. Pārslogotam operatoram vajadzētu būt atbilstošai metodei, kas ir atzīmēta ar atslēgvārda operatoru. Operatora funkcijas argumenti ir operandi, un jūsu operatora funkcija var atgriezt vērtību. Operatora funkcijai jābūt statiskai, un tai jābūt saturoša tipa dalībniekam.

Šis koda fragments parāda, kā izskatīsies tipiska operatora funkcija. Šis piemērs parāda, kā operatorus == un! = Var pārslogot.

publiskā statiskā bola operators == (DistanceCalculator obj1, DistanceCalculator obj2)

       {

atgriešanās obj1.Value == obj2.Value;

       }

public static bool operators! = (DistanceCalculator obj1, DistanceCalculator obj2)

       {

return obj1.Value! = obj2.Value;

       }

Ņemiet vērā, ka vērtība ir īpašība, kas atgriež vērtību collās.

public Int32 Value

       {

gūt

           {

atgriešanās (pēdas * 12) + collas;

           }

       }

Šeit ir pilns DistanceCalculator klases kods.

publiskās klases DistanceCalculator

   {

Int32 pēdas = 0, collas = 0;

publiskais DistanceCalculator (Int32 pēdas = 0, Int32 collas = 0)

       {

tas.pēdas = pēdas;

this.inch = collas;

       }

publiskā statiskā bola operators == (DistanceCalculator obj1, DistanceCalculator obj2)

       {

atgriešanās obj1.Value == obj2.Value;

       }

public static bool operator! = (DistanceCalculator obj1, DistanceCalculator obj2)

       {

return obj1.Value! = obj2.Value;

       }

public override bool Equals (object obj)

       {

DistanceCalculator distanceCalculator = obj kā DistanceCalculator;

ja (distanceCalculator! = null)

           {

atgriešanās (distanceCalculator == šis);

           }

atgriezties nepatiesa;

       }

public override int GetHashCode ()

       {

return Value.GetHashCode ();

       }

publiskās Int32 pēdas

       {

get {atgriešanās pēdas; }

       }

publiskais Int32 collas

       {

get {return collas; }

       }

public Int32 Value

       {

gūt

           {

atgriešanās (pēdas * 12) + collas;

           }

       }

   }

Šis koda fragments parāda, kā jūs varat izmantot klasi DistanceCalculator.

static void Main (virkne [] args)

       {

DistanceCalculator obj1 = jauns DistanceCalculator (1, 2);

DistanceCalculator obj2 = jauns DistanceCalculator (1, 2);

Console.WriteLine ((obj1 == obj2). ToString ());

Konsole. Lasīt ();

       }

Šis koda fragments parāda, kā varat pārslogot operatoru +, lai pievienotu divus objektus.

publiskais statiskais DistanceCalculator operators + (DistanceCalculator obj1, DistanceCalculator obj2)

       {

Int32 totalInches = obj1.Value + obj2.Value;

Int32 pēdas = kopējais collas / 12;

Int32 collas = kopējais collas% 12;

DistanceCalculator temp = jauns DistanceCalculator (pēdas, collas);

atgriešanās temp;

       }

Klasei DistanceCalculator pievienosim šādas divas īpašības. Šis koda fragments parāda, kā jūs varat pievienot divus DistanceCalculator tipa objektus un atgriezt iegūto objektu kā tādu pašu tipu, t.i., atgrieztais objekts ir DistanceCalculator tipa.

publiskās Int32 pēdas

       {

get {atgriešanās pēdas; }

       }

publiskais Int32 collas

       {

get {return collas; }

       }

Lūk, kā jūs varat izveidot divus DistanceCalculator klases gadījumus un izmantot pārslogotas operatora funkcijas, lai rezultātu piešķirtu citam tāda paša veida objektam.

static void Main (virkne [] args)

       {

DistanceCalculator obj1 = jauns DistanceCalculator (1, 11);

DistanceCalculator obj2 = jauns DistanceCalculator (1, 2);

DistanceCalculator obj3 = obj1 + obj2;

Console.WriteLine ("Pēdas:" + obj3.Feet.ToString ());

Console.WriteLine ("Inch:" + obj3.Inch.ToString ());

Konsole. Lasīt ();

       }

$config[zx-auto] not found$config[zx-overlay] not found