Polümorfism C # -s - 2 # paremat polümorfismi vormi koodiga

Lang L: none (table-of-contents):

Anonim

Sissejuhatus polümorfismi C #

Polümorfism on üks objektorienteeritud programmeerimise põhimõtteid. Polü tähendab mitmekordset ja morfiseeriv vahend transformatsiooni läbimiseks, polümorfism tähendab seega võimet võtta mitmeid vorme.

Operaatorite väljund varieerub sõltuvalt operandide tüüpidest, mis on polümorfismi vorm, mida tuntakse operaatori ülekoormusena. Siin saab operaator erinevatel väljunditel toota mitut vormi. Funktsioonide väljund varieerub sõltuvalt erinevatest tagasivõtutüüpidest ja parameetritest, mis on veel üks polümorfismi vorm, mida tuntakse kui funktsiooni ülekoormamist. Siin saab funktsioon mitut väljundit toota erineval kujul.

Polümorfismi kasutatakse laialdaselt pärandi rakendamiseks. Objektid, millel on erinev sisestruktuur, saavad polümorfismi kaudu rakendada ühist liidest. Järgmine diagramm illustreerib polümorfismi toimimist:

See joonis selgitab, et savi on põhiobjekt, millest potid, kausid ja mänguasjad valmistatakse. Kõik need objektid erinevad üksteisest, kuid neil on savi omadused. Need kolm eset on erineva kujuga ja neid kasutatakse erineval viisil, isegi kui need on valmistatud samast materjalist savist.

Polümorfismi vormid

Allpool on toodud kaks polümorfismi vormi:

1. Operaatori ülekoormus

Operaator saab anda erinevaid väljundeid vastavalt operandide tüübile, millel ta töötab. Seda nimetatakse operaatori ülekoormamiseks. Nt, operaator '+' saab lisada kahel täisarvul, samal ajal kui ta suudab kaks stringi siduda. Seega saab sama operaatorit kasutada kahel erineval viisil. Lisamisoperaator lisab üldiselt kaks numbrit. Keeruliste numbrite puhul on liitmine siiski pisut erinev, kus vastavad reaalsed ja kujuteldavad osad on eraldi lisatud. Siin on näidiskood, mis näitab, kuidas "+" operaatorit saab keeruliste numbrite lisamiseks üle laadida:

Kood:

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

Väljund:

See väljund illustreerib operaatori ülekoormamist kahe keerulise numbri lisamiseks. Kood näitab nii operaatori ülekoormamist kui ka funktsiooni ülekoormamist.

2. Funktsiooni ülekoormamine

Funktsioon võib anda erinevaid väljundeid vastavalt parameetrite arvule, samuti nende tagasivoolutüüpidele ja funktsiooni tagasitulekutüübile. Ülalnimetatud kood hõlmab ka funktsiooni ülekoormamist konstrukatori abil. Koodis on 2 konstruktorit; üks on vaikekonstruktor, mis jäetakse tühjaks, teine ​​on parameetritega konstruktor, mida kasutatakse kompleksinumbri lähtestamiseks parameetriteks nimetatud väärtustega.

Joonisel illustreeritud näite kohaselt on funktsioon savi vormimine ja savi vormimiseks ette nähtud element löögi suund. Erinevatest löögisuundadest lähtudes muutub savi vastavalt potiks, kausiks ja mänguasjaks.

Kood:

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

Väljund:

Nagu koodis võib-olla olete märkinud, on saviklass lapsevanemate klass, mille lapseklassid on poti, mänguasja ja kausi klassid. Meetod „Mold” on määratletud nii vanema klassis kui ka sama klassi allkirjaga lasteklassis. Seega, kui luuakse lasteklassi objekt ja seda nimetatakse meetodiks Mold, saab põhiklassi meetod lasteklassi meetodi abil tähtsusetuks. Seega näeme lasteklassi meetodi väljundit. Ülaltoodud kood näitab polümorfismi illustreerimiseks meetodi ülimuslikkust ja mitte ülekoormamist.

Punktid, mida tuleb polümorfismi korral silmas pidada #

  1. Ülekoormus erineb alistamisest. Ülekoormamisel on erinevad funktsiooniallkirjad, samal ajal kui alistamine on samad funktsiooniallkirjad
  2. Polümorfism viitab alaklassi ülaklassi käitumise muutmisele.
  3. Pärimine tähendab alaklassi ülaklassi struktuuri ja käitumise kasutamist.

Järgnevalt on toodud mõned peamised kaasavõtmised:

  1. Polümorfism on objektorienteeritud programmeerimise üks peamisi paradigmasid.
  2. Funktsiooni ülekoormamine muudab funktsiooni päritud klassi funktsiooni tagastamise tüüpide ja parameetrite järgi.
  3. Operaatori ülekoormus muudab operaatori määratlust vastavalt antud parameetritele.
  4. Selle rakendamiseks kasutatakse polümorfismi ja otsustatakse jooksval ajal kutsuda lasteklassi meetod, kasutades meetodit ülimuslikku.

Soovitatavad artiklid

See on juhend polümorfismiks C # -s. Siin käsitleme C # polümorfismi kahte vormi, st operaatori ülekoormamine ja funktsiooni ülekoormamine näidiskoodiga. Lisateabe saamiseks võite vaadata ka järgmist artiklit -

  1. Mis on C StringBuilder?
  2. Kopeeri konstruktor C # -s
  3. Mis on C # mitmekorruseline?
  4. Mis on C # kujundusmuster?
  5. C # konstruktori tüübid koos koodirakendusega
  6. Täielik juhend mitmekeelsuseks C-keeles