Programování

Jak pracovat s přetížením operátora v C #

Polymorfismus je jedním ze základních principů OOP (Object Oriented Programming). Slovo Polymorfismus je odvozeno ze dvou slov - „poly“, což znamená mnoho, a „morph“, což znamená tvary. Polymorfismus tedy implikuje existenci stejné věci, ale v různých formách.

Přetížení operátoru je příkladem statického polymorfismu. Můžete využít přetížení operátorů nebo přidat funkčnost operátorům, abyste mohli pracovat s typy definovanými uživatelem stejně, jako pracujete se základními datovými typy.

Jaké jsou operátory a jaké jsou operátory, které lze přetížit?

Ve výrazu obvykle máte operátory a operandy. Operátory jsou ty, které pracují na operandech a všechny jsou součástí výrazu. Jako příklad je následující výraz, který obsahuje dva operandy a jeden operátor. Operandy jsou X a Y a operátor je +.

X + Y

Operátoři jsou klasifikováni jako unární, binární, srovnávací, přiřazení atd. V závislosti na jejich účelu a počtu operandů, na kterých by operátoři pracovali. I když většinu operátorů lze přetížit, platí určitá omezení. V podstatě nelze přetížit všechny operátory.

Unární operátory, tj. Operátory, které pracují s jedním operandem, mohou být přetíženy. Můžete také přetížit binární operátory a srovnávací operátory jako, ==,! =,, =. Nelze však přetížit operátory =,?, ->, new, is, sizeof nebo typeof. Rovněž nemůžete přetížit podmíněné operátory jako && a || snadno. Nelze přetížit operátor indexování pole [].

Další informace o přetížení všech operátorů najdete v tomto článku MSDN.

Implementace přetížení operátoru v C #

V této části prozkoumáme, jak můžeme implementovat přetížení operátorů v C #. Zvažte následující třídu s názvem DistanceCalculator.

veřejná třída DistanceCalculator

   {

Int32 stopy = 0, palec = 0;

veřejný DistanceCalculator (Int32 stopy = 0, Int32 palce = 0)

       {

this.feet = nohy;

this.inch = palec;

       }

   }

Viz výše uvedený seznam kódů. Třída DistanceCalculator obsahuje dva datové členy typu Int32, jmenovitě stopy a palce. Nyní bychom do této třídy přidali další metody, abychom ilustrovali, jak lze operátory přetížit.

Při práci s přetížením operátora musíte mít na paměti určité body. Operátor, který má být přetížen, by měl mít odpovídající metodu, která je označena operátorem klíčových slov. Argumenty funkce operator jsou operandy a vaše funkce operator může vrátit hodnotu. Funkce operátoru by měla být statická a měla by být členem obsahujícího typu.

Následující fragment kódu ukazuje, jak by vypadala typická funkce operátoru. Tento příklad ukazuje, jak lze přetížit operátory == a! =.

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

       {

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

       }

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

       {

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

       }

Hodnota je vlastnost, která vrací hodnotu v palcích.

veřejná hodnota Int32

       {

dostat

           {

návrat (stopy * 12) + palec;

           }

       }

Tady je kompletní seznam kódů třídy DistanceCalculator.

veřejná třída DistanceCalculator

   {

Int32 stopy = 0, palec = 0;

veřejný DistanceCalculator (Int32 stopy = 0, Int32 palce = 0)

       {

this.feet = nohy;

this.inch = palec;

       }

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

       {

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

       }

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

       {

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

       }

public override bool Equals (objekt obj)

       {

DistanceCalculator distanceCalculator = obj jako DistanceCalculator;

if (distanceCalculator! = null)

           {

návrat (distanceCalculator == this);

           }

návrat false;

       }

veřejné přepsání int GetHashCode ()

       {

návratová hodnota.GetHashCode ();

       }

veřejné Int32 Feet

       {

získat {zpáteční nohy; }

       }

public Int32 Inch

       {

get {return palec; }

       }

veřejná hodnota Int32

       {

dostat

           {

návrat (stopy * 12) + palec;

           }

       }

   }

Následující fragment kódu ukazuje, jak můžete použít třídu DistanceCalculator.

static void Main (řetězec [] args)

       {

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

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

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

Console.Read ();

       }

Následující fragment kódu ukazuje, jak můžete přetížit operátor + a přidat dva objekty.

veřejný statický operátor DistanceCalculator + (DistanceCalculator obj1, DistanceCalculator obj2)

       {

Int32 totalInches = obj1.Value + obj2.Value;

Int32 stop = celkem palců / 12;

Int32 inch = totalInches% 12;

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

návratová teplota;

       }

Přidejte do třídy DistanceCalculator následující dvě vlastnosti. Následující fragment kódu ukazuje, jak můžete přidat dva objekty typu DistanceCalculator a vrátit výsledný objekt jako stejný typ, tj. Vrácený objekt je typu DistanceCalculator.

veřejné Int32 Feet

       {

získat {zpáteční nohy; }

       }

public Int32 Inch

       {

get {return palec; }

       }

Zde je ukázka, jak můžete vytvořit dvě instance třídy DistanceCalculator a využít funkci přetíženého operátoru k přiřazení výsledku k jinému objektu stejného typu.

static void Main (řetězec [] 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