Polymorfismi C #: ssa C #: n suosituimmat polymorfismin muodot koodilla

Sisällysluettelo:

Anonim

Johdanto polymorfismiin C #: ssä

Polymorfismi on yksi olio-ohjelmoinnin periaatteista. Poly tarkoittaa useita ja morfisoivia välineitä muutoksen läpikäymiseksi, polymorfismi tarkoittaa siten kykyä saada useita muotoja.

Operaattorien tuotos vaihtelee operandien tyypeistä riippuen, mikä on polymorfismin muoto, jota kutsutaan Operaattorin ylikuormitukseksi. Tässä operaattori voi toteuttaa useita muotoja tuottaa erilaisia ​​lähtöjä. Toimintojen lähtö vaihtelee eri paluutapojen ja parametrien perusteella, mikä on toinen funktion ylikuormitukseksi tunnettu polymorfismi. Tässä toiminnolla on useita muotoja tuottaa useita lähtöjä.

Polymorfismia käytetään laajasti perinnöksen toteuttamiseen. Objektit, joilla on erilainen sisäinen rakenne, voivat toteuttaa yhteisen rajapinnan polymorfismin kautta. Seuraava kaavio kuvaa polymorfismin toimintaa:

Tämä luku selittää, että savi on kantaesine, josta ruukku, kulho ja leluesineet valmistetaan. Kaikki nämä esineet eroavat toisistaan, mutta niillä on savin ominaisuudet. Näillä kolmella esineellä on erilainen muoto ja niitä käytetään eri tavoin, vaikka ne olisi valmistettu samasta materiaalista.

Polymorfismin muodot

Alla on polymorfismin 2 muotoa:

1. Operaattorin ylikuormitus

Operaattori voi antaa erilaisia ​​lähtöjä operandien tyypin perusteella, jolla se toimii. Tätä kutsutaan käyttäjän ylikuormitukseksi. Esimerkiksi operaattori '+' voi suorittaa lisäyksen kahdella kokonaisluvulla, kun taas se voi ketjuttaa kaksi merkkijonoa. Siten samaa operaattoria voidaan käyttää kahdella eri tavalla. Lisäysoperaattori lisää yleensä kaksi numeroa. Monimutkaisten lukujen tapauksessa lisäys on kuitenkin hieman erilainen, jolloin vastaavat todelliset osat ja kuvitteelliset osat lisätään erikseen. Tässä on esimerkki koodista, joka osoittaa, kuinka ”+” -operaattori voidaan ylikuormittaa monimutkaisten numeroiden lisäämiseksi:

Koodi:

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

lähtö:

Tämä lähtö kuvaa operaattorin ylikuormitusta kahden kompleksimäärän lisäämiseksi. Koodi osoittaa käyttäjän ylikuormituksen samoin kuin toiminnan ylikuormituksen.

2. Toiminnon ylikuormitus

Toiminto voi antaa erilaisia ​​lähtöjä parametrien lukumäärän sekä niiden paluutapojen ja toiminnon palautustyypin perusteella. Edellä mainittu koodi kattaa myös toiminnan ylikuormituksen konstruktorilla. Koodissa on 2 rakentajaa; yksi on oletuskonstruktori, joka jätetään tyhjäksi, kun taas toinen on parametrisoitu konstruktori, jota käytetään kompleksinumeron alustamiseen parametreina mainituilla arvoilla.

Kuvassa esitetyn esimerkin mukaan funktio on savea muovata ja iskun suunta on savi, joka on tarkoitettu muovaamaan savi. Eri aivohalvaussuuntien perusteella savi muuttuu ruukkuun, kulhoon ja leluun.

Koodi:

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

lähtö:

Kuten koodissa olet saattanut huomata, savi luokka on vanhempi luokka, jonka lasten luokat ovat potti-, lelu- ja kulholuokat. Menetelmä "Muotti" on määritelty sekä vanhemmuusluokassa että lapsiluokassa samalla funktiolla. Siksi, kun lapsiluokan objekti luodaan ja se kutsuu menetelmää Mold, perusluokan menetelmä ohitetaan lastenluokkomenetelmällä. Siten näemme lastenluokan menetelmän tuotoksen. Yllä oleva koodi osoittaa menetelmän ohittamisen eikä ylikuormituksen polymorfismin havainnollistamiseksi.

C: n polymorfismin kannalta pidettävät näkökohdat

  1. Ylikuormitus eroaa ohittamisesta. Ylikuormituksella on erilaisia ​​toiminto-allekirjoituksia, kun taas ylikuormituksella on samat toiminto-allekirjoitukset
  2. Polymorfismi viittaa alaluokan superluokan käyttäytymisen muuttamiseen.
  3. Perinnöllä tarkoitetaan yliluokan rakenteen ja käyttäytymisen alaluokassa.

Seuraavassa on muutamia tärkeitä otteita:

  1. Polymorfismi on yksi olio-ohjelmoinnin tärkeimmistä paradigmoista.
  2. Funktion ylikuormitus muuttaa toimintoa perityn luokan funktion palautustyyppien ja parametrien mukaisesti.
  3. Operaattorin ylikuormitus muuttaa käyttäjän määritelmää annettujen parametrien mukaisesti.
  4. Polymorfismia käytetään sen toteuttamiseen, ja se päättää juoksuaikana kutsua lastenluokan menetelmää menetelmän ohittamisen avulla.

Suositellut artikkelit

Tämä on opas polymorfismiin C #: ssä. Tässä keskustellaan C #: n polymorfismin molemmista muodoista, ts. Operaattorin ylikuormitus ja funktion ylikuormitus näytekoodilla. Voit myös tarkastella seuraavaa artikkelia saadaksesi lisätietoja -

  1. Mikä on StringBuilder C #: ssä
  2. Kopioi rakentaja C #: ssä
  3. Mikä on monisäikeinen C #: ssä?
  4. Mikä on suunnittelukuvio C #: ssä?
  5. C #: n konstruktorityypit koodin toteutuksella
  6. Täydellinen opas monisäikeisiin C #