Полиморфизъм в C # - Топ 2 форми на полиморфизъм в C # с код

Съдържание:

Anonim

Въведение в полиморфизма в C #

Полиморфизмът е един от принципите на обектно-ориентираното програмиране. Поли означава множество и морфиращи средства да претърпят трансформация, така полиморфизмът означава способността за приемане на множество форми.

Изходът на операторите варира в зависимост от видовете операнди, което е форма на полиморфизъм, известна като операторско претоварване. Тук операторът може да приема множество форми, за да произвежда различни изходи. Изходът на функциите варира в зависимост от различни видове и параметри на връщането, което е друга форма на полиморфизъм, известна като Function Overloading. Тук функцията приема множество форми, за да генерира множество изходи.

Полиморфизмът се използва широко за осъществяване на наследяването. Обекти с различна вътрешна структура могат да реализират общ интерфейс чрез полиморфизъм. Следващата схема илюстрира работата на полиморфизма:

Тази фигура обяснява, че глината е родителският предмет, от който са направени предмети за гърне, купа и играчка. Всички тези предмети са различни един от друг, но имат свойствата на глина. Тези три предмета имат различни форми и се използват по различни начини, дори когато са направени от една и съща материална глина.

Форми на полиморфизма

По-долу са 2-те форми на полиморфизъм:

1. Претоварване на оператора

Операторът може да дава различни изходи въз основа на типа операнди, на които работи. Това се нарича претоварване на оператор. Например, операторът '+' може да извърши добавяне на две цели числа, докато може да обединява два низа. По този начин един и същ оператор може да се използва по два различни начина. Операторът за добавяне обикновено добавя две числа. При сложните числа обаче добавката е малко по-различна, където съответните реални части и въображаемите части се добавят отделно. Ето примерен код, който показва как операторът "+" може да бъде претоварен, за да добави сложни числа:

Код:

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

изход:

Този изход илюстрира претоварването на оператора за добавяне на две сложни числа. Кодът показва претоварване на оператора, както и претоварване с функции.

2. Функция Претоварване

Функцията може да дава различни изходи въз основа на броя параметри, както и техните видове връщане и типа връщане на функцията. Гореспоменатият код обхваща и претоварването на функциите с помощта на конструктор. В кода има 2 конструктора; единият е конструкторът по подразбиране, който се оставя празен, а другият е параметризиран конструктор, който се използва за инициализиране на сложното число със стойностите, посочени като параметри.

Вземайки примера, илюстриран на фигурата, функцията е формоване на глината, а посоката на хода е членът, предвиден да формира глината. Въз основа на различни посоки на удара, глината се трансформира съответно в саксията, купата и играчката.

Код:

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

изход:

Както може би сте отбелязали в кода, класът глина е класът родител, чиито класове за деца са класове за гърне, играчка и купа. Методът „Mold“ се дефинира в родителския клас, както и в клас на деца със същата подпис на функция. Следователно, когато обект от детския клас е създаден и той извиква метода Mold, методът на базовия клас се преодолява от метода на детския клас. Така виждаме резултата от метода на детския клас. Горният код показва метод за отмяна и не претоварване, за да илюстрира полиморфизма.

Точки, които трябва да имате предвид за полиморфизма в c #

  1. Претоварването е различно от Overriding. Претоварването има различни подписи на функции, докато презаписването има еднакви подписи на функции
  2. Полиморфизмът се отнася до промяна на поведението на свръхклас в подклас.
  3. Наследяването се отнася до използването на структурата и поведението на суперклас в подклас.

Следват няколко ключови начина:

  1. Полиморфизмът е една от основните парадигми на обектно-ориентираното програмиране.
  2. Претоварването с функция променя функцията според типовете връщане и параметрите на функцията в наследения клас.
  3. Претоварването на оператора променя дефиницията на оператора според дадени параметри.
  4. Полиморфизмът се използва, за да се приложи, той решава по време на изпълнение да извика метода на клас на деца, използвайки метод за отмяна.

Препоръчителни статии

Това е ръководство за полиморфизма в C #. Тук обсъждаме двете форми на полиморфизъм в C # т.е. претоварване на оператор и претоварване на функции с примерен код. Можете също да разгледате следната статия, за да научите повече -

  1. Какво представлява StringBuilder в C #
  2. Копие конструктор в C #
  3. Какво е многопоточност в C #?
  4. Какво представлява дизайнерският модел в C #?
  5. Видове конструктор в C # с изпълнение на код
  6. Пълно ръководство за многопоточност в C #