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