Въведение в полиморфизма в 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 #
- Претоварването е различно от Overriding. Претоварването има различни подписи на функции, докато презаписването има еднакви подписи на функции
- Полиморфизмът се отнася до промяна на поведението на свръхклас в подклас.
- Наследяването се отнася до използването на структурата и поведението на суперклас в подклас.
Следват няколко ключови начина:
- Полиморфизмът е една от основните парадигми на обектно-ориентираното програмиране.
- Претоварването с функция променя функцията според типовете връщане и параметрите на функцията в наследения клас.
- Претоварването на оператора променя дефиницията на оператора според дадени параметри.
- Полиморфизмът се използва, за да се приложи, той решава по време на изпълнение да извика метода на клас на деца, използвайки метод за отмяна.
Препоръчителни статии
Това е ръководство за полиморфизма в C #. Тук обсъждаме двете форми на полиморфизъм в C # т.е. претоварване на оператор и претоварване на функции с примерен код. Можете също да разгледате следната статия, за да научите повече -
- Какво представлява StringBuilder в C #
- Копие конструктор в C #
- Какво е многопоточност в C #?
- Какво представлява дизайнерският модел в C #?
- Видове конструктор в C # с изпълнение на код
- Пълно ръководство за многопоточност в C #