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 ();
}