Ohjelmointi

Kuinka työskennellä käyttäjän ylikuormituksen kanssa C #

Polymorfismi on yksi OOP: n (Object Oriented Programming) perusperiaatteista. Sana polymorfismi on johdettu kahdesta sanasta - "poly", joka tarkoittaa monia, ja "morph", joka tarkoittaa muotoja. Näin ollen polymorfismi merkitsee saman asian olemassaoloa, mutta eri muodoissa.

Operaattorin ylikuormitus on esimerkki staattisesta polymorfismista. Voit hyödyntää operaattorin ylikuormitusta tai lisätä operaattoreille toimintoja, jotta voit työskennellä käyttäjän määrittelemien tyyppien kanssa samalla tavalla kuin perustietotyyppien kanssa.

Mitkä ovat operaattorit ja mitkä ovat niitä operaattoreita, joita voidaan ylikuormittaa?

Lausekkeessa sinulla on tyypillisesti operaattorit ja operandit. Operaattorit ovat niitä, jotka työskentelevät operandeilla, ja ne kaikki ovat osa ilmaisua. Seuraava on lauseke, joka sisältää kaksi operandia ja yhden operaattorin. Operandit ovat X ja Y ja operaattori on +.

X + Y

Operaattorit luokitellaan yksi-, binääri-, vertailu-, määritys- jne. Mukaan niiden tarkoituksen ja operandien lukumäärän mukaan, joilla operaattorit toimisivat. Vaikka suurin osa operaattoreista voi olla ylikuormitettu, sovelletaan tiettyjä rajoituksia. Pohjimmiltaan kaikkia operaattoreita ei voida ylikuormittaa.

Yksittäiset operaattorit eli operaattorit, jotka työskentelevät yhden operandin kanssa, voivat olla ylikuormitettuja. Voit myös ylikuormittaa binäärioperaattoreita ja vertailuoperaattoreita, kuten ==,! =,, =. Et voi kuitenkaan ylikuormittaa operaattoreita =,?, ->, new, is, sizeof tai typeof. Et voi myöskään ylikuormittaa ehdollisia operaattoreita, kuten && ja || helposti. Taulukkoindeksioperaattoria [] ei myöskään voida ylikuormittaa.

Tästä MSDN-artikkelista saat lisätietoja siitä, mitä kaikkia operaattoreita voidaan ylikuormittaa.

Operaattorin ylikuormitus C #: ssä

Tässä osassa tutkitaan, miten voimme toteuttaa operaattorin ylikuormituksen C #: ssa. Harkitse seuraavaa luokkaa nimeltä DistanceCalculator.

julkisen luokan DistanceCalculator

   {

Int32 jalkaa = 0, tuumaa = 0;

public DistanceCalculator (Int32 jalkaa = 0, Int32 tuumaa = 0)

       {

tämä.jalat = jalat;

tämä. tuuma = tuuma;

       }

   }

Katso yllä oleva koodiluettelo. DistanceCalculator-luokka sisältää kaksi Int32-tyyppistä datajäsentä, nimittäin jalat ja tuumat. Lisätään nyt tähän luokkaan lisää menetelmiä havainnollistaaksemme, kuinka operaattoreita voidaan ylikuormittaa.

Kun työskentelet käyttäjän ylikuormituksen kanssa, sinun on pidettävä mielessä tietyt seikat. Ylikuormitettavalla operaattorilla tulisi olla vastaava menetelmä, joka on merkitty avainsanaoperaattorilla. Operaattorifunktion argumentit ovat operandeja ja operaattoritoimintosi voi palauttaa arvon. Operaattoritoiminnon tulisi olla staattinen ja sen tulisi olla sisältävän tyypin jäsen.

Seuraava koodinpätkä kuvaa, miltä tyypillinen operaattoritoiminto näyttäisi. Tämä esimerkki osoittaa, kuinka == ja! = Operaattorit voidaan ylikuormittaa.

julkinen staattinen bool-operaattori == (DistanceCalculator obj1, DistanceCalculator obj2)

       {

return obj1.Value == obj2.Value;

       }

julkinen staattinen bool-operaattori! = (DistanceCalculator obj1, DistanceCalculator obj2)

       {

return obj1.Value! = obj2.Value;

       }

Huomaa, että Arvo on ominaisuus, joka palauttaa arvon tuumina.

public Int32 -arvo

       {

saada

           {

paluu (jalat * 12) + tuuma;

           }

       }

Tässä on täydellinen DistanceCalculator-luokan koodiluettelo.

julkisen luokan DistanceCalculator

   {

Int32 jalkaa = 0, tuumaa = 0;

public DistanceCalculator (Int32 jalkaa = 0, Int32 tuumaa = 0)

       {

tämä.jalat = jalat;

tämä. tuuma = tuuma;

       }

julkinen staattinen bool-operaattori == (DistanceCalculator obj1, DistanceCalculator obj2)

       {

return obj1.Value == obj2.Value;

       }

julkinen staattinen bool-operaattori! = (DistanceCalculator obj1, DistanceCalculator obj2)

       {

return obj1.Value! = obj2.Value;

       }

public override bool Equals (objekti obj)

       {

DistanceCalculator distanceCalculator = obj kuin DistanceCalculator;

jos (distanceCalculator! = null)

           {

paluu (distanceCalculator == tämä);

           }

return false;

       }

julkinen ohitus int GetHashCode ()

       {

return Value.GetHashCode ();

       }

julkiset Int32-jalat

       {

saada {paluujalat; }

       }

julkinen Int32 tuumaa

       {

get {paluu tuumaa; }

       }

public Int32 -arvo

       {

saada

           {

paluu (jalat * 12) + tuuma;

           }

       }

   }

Seuraava koodinpätkä kuvaa kuinka voit käyttää DistanceCalculator-luokkaa.

staattinen void Main (merkkijono [] args)

       {

DistanceCalculator obj1 = uusi DistanceCalculator (1, 2);

DistanceCalculator obj2 = uusi DistanceCalculator (1, 2);

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

Konsoli.Lue ();

       }

Seuraava koodinpätkä osoittaa, kuinka voit ylikuormittaa + -operaattoria kahden objektin lisäämiseksi.

staattinen staattinen DistanceCalculator-operaattori + (DistanceCalculator obj1, DistanceCalculator obj2)

       {

Int32 totalInches = obj1.Arvo + obj2.Arvo;

Int32 jalkaa = totalTuumaa / 12;

Int32 tuumaa = totalInch% 12;

DistanceCalculator temp = uusi DistanceCalculator (jalkaa, tuumaa);

paluulämpötila;

       }

Lisätään seuraavat kaksi ominaisuutta DistanceCalculator-luokkaan. Seuraava koodinpätkä osoittaa, kuinka voit lisätä kaksi DistanceCalculator-tyyppistä objektia ja palauttaa tuloksena olevan objektin samantyyppiseksi eli palautettu objekti on tyyppiä DistanceCalculator.

julkiset Int32-jalat

       {

saada {paluujalat; }

       }

julkinen Int32 tuumaa

       {

get {paluu tuumaa; }

       }

Näin voit luoda kaksi DistanceCalculator-luokan esiintymää ja käyttää ylikuormitettua operaattoritoimintoa tulosten määrittämiseen toiseen samantyyppiseen objektiin.

staattinen void Main (merkkijono [] args)

       {

DistanceCalculator obj1 = uusi DistanceCalculator (1, 11);

DistanceCalculator obj2 = uusi DistanceCalculator (1, 2);

DistanceCalculator obj3 = obj1 + obj2;

Console.WriteLine ("Jalat:" + obj3.Feet.ToString ());

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

Konsoli.Lue ();

       }

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