Programovanie

Ako pracovať s preťažením operátora v C #

Polymorfizmus je jedným zo základných princípov OOP (Object Oriented Programming). Slovo Polymorfizmus je odvodené z dvoch slov - „poly“, čo znamená veľa, a „morph“, čo znamená tvary. Polymorfizmus teda znamená existenciu toho istého, ale v rôznych formách.

Preťaženie operátora je príkladom statického polymorfizmu. Môžete využiť preťaženie operátora alebo pridať operátorom funkčnosť, aby ste mohli pracovať s používateľsky definovanými typmi rovnako, ako pracujete so základnými dátovými typmi.

Čo sú to operátori a aké sú operátory, ktoré môžu byť preťažené?

Vo výraze máte zvyčajne operátory a operandy. Operátory sú tie, ktoré pracujú na operandoch, a všetky sú súčasťou výrazu. Nasleduje príklad výrazu, ktorý obsahuje dva operandy a jeden operátor. Operandy sú X a Y a operátor je +.

X + Y

Operátory sú klasifikované ako unárne, binárne, porovnávacie, priradené atď. V závislosti od ich účelu a počtu operandov, na ktorých by operátori pracovali. Aj keď môže byť väčšina operátorov preťažená, platia určité obmedzenia. V podstate nemožno preťažiť všetkých operátorov.

Unárne operátory, tj. Operátory, ktoré pracujú s jedným operandom, môžu byť preťažené. Môžete tiež preťažiť binárne operátory a porovnávacie operátory ako, ==,! =,, =. Nemôžete však preťažiť operátory =,?, ->, new, is, sizeof alebo typeof. Tiež nemôžete preťažiť podmienené operátory ako && a || ľahko. Operátor indexovania poľa [] tiež nemôže byť preťažený.

Viac o tom, čo môže byť preťažené všetkým operátorom, sa dozviete z tohto článku na serveri MSDN.

Implementácia preťaženia operátora v C #

V tejto časti preskúmame, ako môžeme implementovať preťaženie operátorov v C #. Zvážte nasledujúcu triedu s názvom DistanceCalculator.

verejná trieda DistanceCalculator

   {

Int32 stôp = 0, palec = 0;

verejný kalkulátor vzdialenosti (Int32 stopy = 0, Int32 palec = 0)

       {

this.feet = nohy;

this.inch = palec;

       }

   }

Prečítajte si zoznam kódov vyššie. Trieda DistanceCalculator obsahuje dva dátové členy typu Int32, a to stopy a palce. Teraz by sme do tejto triedy pridali ďalšie metódy na ilustráciu toho, ako môžu byť operátori preťažení.

Pri práci s preťažením obsluhy musíte mať na pamäti určité body. Operátor, ktorý sa má preťažiť, by mal mať zodpovedajúcu metódu, ktorá je označená operátorom kľúčových slov. Argumenty funkcie operátora sú operandy a vaša funkcia operátora môže vrátiť hodnotu. Funkcia operátora by mala byť statická a mala by byť členom obsahujúceho typu.

Nasledujúci úryvok kódu ilustruje, ako by vyzerala typická funkcia operátora. Tento príklad ukazuje, ako môžu byť operátory == a! = Preťažené.

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

       {

návrat obj1.Value == obj2.Value;

       }

verejný statický operátor bool! = (DistanceCalculator obj1, DistanceCalculator obj2)

       {

návrat obj1.Value! = obj2.Value;

       }

Hodnota je vlastnosť, ktorá vracia hodnotu v palcoch.

verejná hodnota Int32

       {

dostať

           {

návrat (stopy * 12) + palec;

           }

       }

Tu je kompletný zoznam kódov triedy DistanceCalculator.

verejná trieda DistanceCalculator

   {

Int32 stôp = 0, palec = 0;

verejný kalkulátor vzdialenosti (Int32 stopy = 0, Int32 palec = 0)

       {

this.feet = nohy;

this.inch = palec;

       }

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

       {

návrat obj1.Value == obj2.Value;

       }

verejný statický operátor bool! = (DistanceCalculator obj1, DistanceCalculator obj2)

       {

návrat obj1.Value! = obj2.Value;

       }

public override bool Rovná sa (objekt obj)

       {

DistanceCalculator distanceCalculator = obj ako DistanceCalculator;

if (distanceCalculator! = null)

           {

return (distanceCalculator == this);

           }

návrat nepravdivý;

       }

verejné prepísanie int GetHashCode ()

       {

návratová hodnota.GetHashCode ();

       }

verejné nohy Int32

       {

dostať {spiatočné nohy; }

       }

public Int32 Inch

       {

get {return inch; }

       }

verejná hodnota Int32

       {

dostať

           {

návrat (stopy * 12) + palec;

           }

       }

   }

Nasledujúci úryvok kódu ilustruje, ako môžete používať triedu DistanceCalculator.

static void Main (reťazec [] args)

       {

DistanceCalculator obj1 = nový DistanceCalculator (1, 2);

DistanceCalculator obj2 = nový DistanceCalculator (1, 2);

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

Console.Read ();

       }

Nasledujúci úryvok kódu ukazuje, ako môžete preťažiť operátor + a pridať dva objekty.

verejný statický operátor DistanceCalculator + (DistanceCalculator obj1, DistanceCalculator obj2)

       {

Int32 totalInches = obj1.Value + obj2.Value;

Int32 stôp = celkový počet palcov / 12;

Int32 inch = totalInches% 12;

DistanceCalculator temp = nový DistanceCalculator (stopy, palce);

návratová teplota;

       }

Pridajme nasledujúce dve vlastnosti do triedy DistanceCalculator. Nasledujúci úryvok kódu ukazuje, ako môžete pridať dva objekty typu DistanceCalculator a výsledný objekt vrátiť ako rovnaký typ, t. J. Vrátený objekt je typu DistanceCalculator.

verejné nohy Int32

       {

dostať {spiatočné nohy; }

       }

public Int32 Inch

       {

get {return inch; }

       }

Tu je príklad, ako môžete vytvoriť dve inštancie triedy DistanceCalculator a využiť funkciu preťaženého operátora na priradenie výsledku k inému objektu rovnakého typu.

static void Main (reťazec [] args)

       {

DistanceCalculator obj1 = nový DistanceCalculator (1, 11);

DistanceCalculator obj2 = nový DistanceCalculator (1, 2);

DistanceCalculator obj3 = obj1 + obj2;

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

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

Console.Read ();

       }

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