Uvod v polimorfizem v C #
Polimorfizem je eno izmed načel objektno usmerjenega programiranja. Poli pomeni večkratno in morfijsko sredstvo za preobrazbo, polimorfizem torej pomeni zmožnost več oblik.
Izhodi operaterjev se razlikujejo glede na vrste operandov, kar je oblika polimorfizma, znanega kot Operator preobremenitev. Tu lahko operater sprejme več oblik za ustvarjanje različnih izhodov. Izhodi funkcij se razlikujejo glede na različne vrste in parametre vračanja, kar je še ena oblika polimorfizma, znana kot Function Overloading. Tu ima funkcija več oblik, da ustvari več izhodov.
Polimorfizem se veliko uporablja za izvajanje dedovanja. Predmeti z različno notranjo strukturo lahko izvajajo skupni vmesnik s polimorfizmom. Naslednji diagram prikazuje delovanje polimorfizma:
Ta slika razlaga, da je glina matični predmet, iz katerega so izdelani predmeti za lonec, posodo in igrače. Vsi ti predmeti se med seboj razlikujejo, vendar imajo lastnosti gline. Ti trije predmeti so različnih oblik in se uporabljajo na različne načine, tudi če so izdelani iz istega materiala gline.
Oblike polimorfizma
Spodaj sta dve obliki polimorfizma:
1. Preobremenitev operaterja
Operator lahko da različne izhode glede na vrsto operandov, na katerih deluje. To se imenuje Operator preobremenitev. Npr., Lahko operater '+' izvede dodajanje na dveh celih številih, medtem ko lahko povezuje dva niza. Tako se lahko isti operater uporablja na dva različna načina. Operater seštevanja običajno doda dve številki. Pri kompleksnih številkah pa je seštevanje nekoliko drugače, kjer se ločeno seštevajo ustrezni dejanski deli in namišljeni deli. Tu je primer kode, ki prikazuje, kako se lahko operater '+' preobremeni in doda kompleksne številke:
Koda:
using System;
namespace Overload (
class Complex
(
public double x;
public double y;
// no-argument constructor
public Complex() ()
// parameterized constructor
public Complex(double real, double img)
(
x = real;
y = img;
)
// Overloading of Binary "+" operator
public static Complex operator + (Complex c1,
Complex c2)
(
Complex c3 = new Complex();
c3.x = c1.x + c2.x;
c3.y = c1.y + c2.y;
return c3;
)
// function to display result
public void display()
(
Console.WriteLine("(0) + (1)i", x, y);
)
)
class CalNum (
// Driver Code
static void Main(string() args)
(
Complex num1 = new Complex(2.5, 3.5);
Complex num2 = new Complex(1.2, 6.5);
Complex num3 = num1 + num2;
Console.Write("c1 = ");
num1.display();
Console.Write("c2 = ");
num2.display();
Console.Write("c3 = ");
num3.display();
)
)
)
Izhod:
Ta izhod prikazuje preobremenitev operaterja, da doda dve kompleksni številki. Koda prikazuje preobremenitev operaterja in funkcijsko preobremenitev.
2. Funkcija Preobremenitev
Funkcija lahko daje različne izhode glede na število parametrov, kot tudi njihove vrste vrnitve in vrsto vrnitve funkcije. Zgoraj omenjena koda zajema tudi preobremenitev funkcij s pomočjo konstruktorja. V kodi sta 2 konstruktorja; eden je privzeti konstruktor, ki je prazen, drugi pa je parametriziran konstruktor, ki se uporablja za inicializacijo kompleksnega števila z vrednostmi, omenjenimi kot parametri.
Na primeru, prikazanem na sliki, je funkcija oblikovanje gline, smer udarca pa je član, ki je namenjen oblikovanju gline. Na podlagi različnih smeri giba se glina spremeni v lonec, posodo in igračo.
Koda:
using System;
using System.Collections.Generic;
public class Clay
(
// A few example members
public int Height ( get; set; )
public int strokeDirection ( get; set; )
// Virtual method
public virtual void Mould()
(
Console.WriteLine("Beginning to mould the clay");
)
)
class Pot : Clay
(
public override void Mould()
(
// Code to make a pot Console.WriteLine("Making a pot");
base.Mould();
)
)
class Bowl : Clay
(
public override void Mould()
(
// Code to make a bowl
Console.WriteLine("Making a bowl");
base.Mould();
)
)
class Toy : Clay
(
public override void Mould()
(
// Code to make a toy
Console.WriteLine("Making a toy");
base.Mould();
)
)
class Program
(
static void Main(string() args)
(
// Illustrating Polymorphism #1: a Pot, Bowl and Toy
// can all be used wherever Clay is expected. No cast is
// needed because an implicit conversion exists from a derived
// class to its base class.
var items = new List
(
new Pot(),
new Bowl(),
new Toy()
);
// Polymorphism at work #2: the virtual method Mould is
// invoked on each of the derived classes, not the base class.
foreach (var item in items)
(
item.Mould();
)
)
)
Izhod:
Kot ste morda zapisali v kodi, je razred gline matični razred, katerega otroški razredi so razredi lonca, igrač in sklede. Metoda 'Mold' je definirana v matičnem razredu in tudi otroškem razredu z istim podpisom funkcij. Ko se ustvari predmet otroškega razreda in ga pozove metoda Mold, metoda osnovnega razreda preglasi nadrejeno metodo razreda. Tako vidimo rezultat metode otroškega razreda. Zgornja koda prikazuje način pretiravanja in ne preobremenitve za prikaz polimorfizma.
Točke, ki jih morate upoštevati za polimorfizem v c #
- Preobremenitev se razlikuje od preglasitve. Preobremenitev ima različne podpise funkcij, medtem ko ima overriding iste podpise funkcij
- Polimorfizem se nanaša na spremembo vedenja nadklasa v podrazredu.
- Dedovanje se nanaša na uporabo strukture in obnašanja superklasa v podrazredu.
Sledi nekaj ključnih ukrepov:
- Polimorfizem je ena glavnih paradigem objektno usmerjenega programiranja.
- Preobremenitev funkcije spreminja funkcijo glede na vrnjene vrste in parametre funkcije v podedovanem razredu.
- Preobremenitev operaterja spremeni definicijo operaterja glede na dane parametre.
- Polimorfizem se uporablja za njegovo izvajanje, ki se v času izvajanja odloči, da bo poklical metodo otroškega razreda z metodo prevladovanja.
Priporočeni članki
To je vodnik o polimorfizmu v C #. Tukaj razpravljamo o dveh oblikah polimorfizma v C #, tj. Preobremenjenost operaterja in preobremenitev funkcije z vzorčno kodo. Če želite izvedeti več, si oglejte tudi naslednji članek -
- Kaj je StringBuilder v C #
- Kopiraj konstruktor v C #
- Kaj je Multithreading v C #?
- Kaj je oblikovalski vzorec v C #?
- Vrste konstruktorjev v C # z izvajanjem kode
- Celoten vodnik za večnamensko branje v C #