Polymorfisme i C # - Topp 2 former for polymorfisme i C # med kode

Innholdsfortegnelse:

Anonim

Introduksjon til polymorfisme i C #

Polymorfisme er et av prinsippene for objektorientert programmering. Poly betyr flere og omformende midler for å gjennomgå en transformasjon, polymorfisme betyr dermed muligheten til å ta flere former.

Resultatene fra operatørene varierer avhengig av operandetyper, som er en form for polymorfisme kjent som operatøroverbelastning. Her kan operatøren ta flere former for å produsere forskjellige utganger. Utgangen til funksjonene varierer basert på forskjellige returtyper og parametere, som er en annen form for polymorfisme kjent som Funksjon Overbelastning. Her tar funksjonen flere former for å produsere flere utganger.

Polymorfisme brukes mye til å implementere arv. Gjenstander som har ulik indre struktur kan implementere et felles grensesnitt gjennom polymorfisme. Følgende diagram illustrerer bruken av polymorfisme:

Denne figuren forklarer at leire er den overordnede gjenstanden som potten, skålen og leketøyene er laget av. Alle disse objektene er forskjellige fra hverandre, men de har egenskapene til leire. Disse tre objektene har forskjellige former og brukes på forskjellige måter selv når de er laget av samme materialleire.

Former for polymorfisme

Nedenfor er de to formene for polymorfisme:

1. Overbelastning av operatøren

En operatør kan gi forskjellige utganger basert på typen operander som den opererer på. Dette kalles operatøroverbelastning. F.eks. Kan operatøren '+' utføre tillegg på to heltall, mens den kan slå sammen to strenger. Dermed kan den samme operatøren brukes på to forskjellige måter. Tilleggsoperatøren legger vanligvis to tall. Når det gjelder komplekse tall, er tilsetningen imidlertid litt annerledes, der de tilsvarende virkelige delene og imaginære deler legges separat. Her er et eksempelkode som viser hvordan '+' operatør kan overbelastes for å legge til komplekse tall:

Kode:

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

Produksjon:

Denne utgangen illustrerer overbelastning av operatøren for å legge til to komplekse tall. Koden viser overbelastning av operatør samt overbelastning av funksjoner.

2. Funksjon Overbelastning

En funksjon kan gi forskjellige utganger basert på antall parametere så vel som deres returtyper og funksjonens returtype. Ovennevnte kode dekker også overbelastning av funksjonen ved bruk av en konstruktør. Det er 2 konstruktører i koden; den ene er standardkonstruktøren som blir stående tom, mens den andre er en parameterisert konstruktør som brukes til å initialisere det komplekse tallet med verdiene nevnt som parametere.

Ved å ta eksemplet illustrert på figuren, støper funksjonen leiren og slagretningen er elementet som er tilveiebragt for å forme leiren. Basert på forskjellige slagretninger blir leire transformert til henholdsvis potten, bollen og leketøyet.

Kode:

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

Produksjon:

Som du kanskje har lagt merke til i koden, er leirklassen foreldreklassen hvis barneklasser er gryte-, leketøy- og skålklasser. Metoden 'Mold' er definert i foreldreklassen så vel som barneklassen med samme funksjonssignatur. Når et objekt fra barneklassen opprettes og den kaller metoden Mold, blir baseklasse-metoden derfor overstyrt av barneklasse-metoden. Dermed ser vi resultatet av barneklasse-metoden. Ovenstående kode viser metodeoverskridelse og ikke overbelastning for å illustrere polymorfisme.

Poeng som må huskes på for polymorfisme i c #

  1. Overbelastning er forskjellig fra Overriding. Overbelastning har forskjellige funksjonsunderskrifter mens overstyring har de samme funksjonssignaturene
  2. Polymorfisme viser til å endre oppførselen til en superklasse i underklassen.
  3. Arvel refererer til å bruke strukturen og oppførselen til en superklasse i en underklasse.

Følgende er noen viktige takeaways:

  1. Polymorfisme er en av de viktigste paradigmene for objektorientert programmering.
  2. Funksjon overbelastning endrer funksjonen i henhold til returtyper og parametere for funksjonen i den arvede klassen.
  3. Operatøroverbelastning endrer operatørdefinisjonen i henhold til gitte parametere.
  4. Polymorfisme brukes til å implementere den bestemmer ved kjøretid å kalle barneklasse-metoden ved bruk av metodeoverskridelse.

Anbefalte artikler

Dette er en guide til polymorfisme i C #. Her diskuterer vi de to formene for polymorfisme i C # dvs. Operatøroverbelastning og funksjonsoverbelastning med prøvekode. Du kan også se på følgende artikkel for å lære mer -

  1. Hva er StringBuilder i C #
  2. Copy Constructor i C #
  3. Hva er multithreading i C #?
  4. Hva er designmønster i C #?
  5. Typer konstruktør i C # med kodeimplementering
  6. Komplett guide til multithreading i C #