Uvod u polimorfizam u C #

Polimorfizam je jedan od principa objektno orijentiranog programiranja. Poli znači višestruko i morfalno sredstvo za podvrgavanje transformaciji, polimorfizam stoga znači sposobnost uzimanja više oblika.

Izlaz operatora varira ovisno o tipu operanda, što je oblik polimorfizma poznat kao preopterećenje operatora. Ovdje operater može preuzeti više oblika za proizvodnju različitih rezultata. Izlaz funkcija varira ovisno o različitim vrstama i parametrima povratka, što je još jedan oblik polimorfizma poznat pod nazivom Function Overloading. Ovdje funkcija ima više oblika za proizvodnju više izlaza.

Polimorfizam se uvelike koristi za primjenu nasljeđivanja. Objekti različitih internih struktura mogu implementirati zajedničko sučelje kroz polimorfizam. Sljedeći dijagram ilustrira djelovanje polimorfizma:

Ovaj lik objašnjava da je glina matični predmet od kojeg se izrađuju predmeti za lonac, zdjelu i igračke. Svi se ti predmeti razlikuju jedan od drugog, ali imaju svojstva gline. Ova tri predmeta imaju različite oblike i koriste se na različite načine čak i kada su izrađeni od iste gline od materijala.

Oblici polimorfizma

Ispod su dva oblika polimorfizma:

1. Preopterećenje rukovaoca

Operator može dati različite izlaze na temelju vrste operanda na kojima radi. To se naziva preopterećenje operatora. Npr., Operator "+" može izvršiti sabiranje na dva cijela broja, dok može povezati dva niza. Na taj se način isti operator može koristiti na 2 različita načina. Operator sabiranja obično dodaje dva broja. Međutim, kod složenih brojeva, zbrajanje je malo drugačije, gdje se odgovarajući stvarni dijelovi i imaginarni dijelovi dodaju odvojeno. Evo primjera koda koji pokazuje kako se operator + može preopteretiti za dodavanje složenih brojeva:

Kodirati:

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

Izlaz:

Ovaj izlaz ilustrira preopterećenje operatora za dodavanje dva složena broja. Kod prikazuje preopterećenje operatera kao i preopterećenje funkcije.

2. Preopterećenje funkcije

Funkcija može dati različite izlaze na temelju broja parametara, kao i njihovih vrsta povratka i vrste povratka funkcije. Gore navedeni kod obuhvaća i preopterećenje funkcije pomoću konstruktora. U kodu su 2 konstruktora; jedan je zadani konstruktor koji ostaje prazan, a drugi je parametrizirani konstruktor koji se koristi za inicijalizaciju složenog broja s vrijednostima navedenim kao parametri.

Uzimajući primjer prikazan na slici, funkcija je oblikovanje gline, a smjer hoda je član koji je predviđen za oblikovanje gline. Na temelju različitih pravaca udara, glina se pretvara u lonac, posudu ili igračku.

Kodirati:

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

Izlaz:

Kao što ste možda primijetili u kodu, klasa gline je matični razred u kojem su satovi klasa lonca, igračaka i zdjela. Metoda 'Kalup' definirana je u roditeljskoj klasi kao i podređenoj klasi s istim potpisom funkcije. Dakle, kada se stvori objekt dječje klase i zove metoda Mold, metoda osnovne klase prevladava nadređenom metodom klase. Dakle, vidimo izlaz metode dječje klase. Gornja šifra pokazuje način prevladavanja i ne preopterećenje za ilustraciju polimorfizma.

Točke koje treba imati na umu za polimorfizam u c #

  1. Preopterećenje se razlikuje od preglasavanja. Preopterećenje ima različite potpise funkcija dok preglasavanje ima iste potpise funkcija
  2. Polimorfizam se odnosi na promjenu ponašanja natprosječne klase.
  3. Nasljeđivanje se odnosi na upotrebu strukture i ponašanja superklase u podrazredu.

Evo nekoliko ključnih postupaka:

  1. Polimorfizam je jedna od glavnih paradigmi objektno orijentiranog programiranja.
  2. Preopterećenje funkcije mijenja funkciju prema vrstama povratka i parametrima funkcije u naslijeđenoj klasi.
  3. Preopterećenje operatora mijenja definiciju operatera prema zadanim parametrima.
  4. Polimorfizam se koristi za njegovo provođenje, a odlučuje da se u vrijeme izvođenja nazove metoda klase djeteta pomoću metode prevladavanja.

Preporučeni članci

Ovo je vodič za polimorfizam u C #. Ovdje smo raspravljali o dva oblika polimorfizma u C #, tj. Preopterećenje operatora i preopterećenje funkcije s kodom uzorka. Možete pogledati i sljedeći članak da biste saznali više -

  1. Što je StringBuilder u C #
  2. Kopiraj konstruktor u C #
  3. Što je Multithreading u C #?
  4. Što je dizajnerski uzorak u C #?
  5. Vrste konstruktora u C # s implementacijom koda
  6. Kompletni vodič za multithreading u C #

Kategorija: