Увод у полиморфизам у Ц #
Полиморфизам је један од принципа објектно оријентисаног програмирања. Поли значи вишеструко и морфирајуће средство да се подвргну трансформацији, па полиморфизам значи способност узимања вишеструких облика.
Излаз оператора варира у зависности од врсте операнда, што је облик полиморфизма познат као преоптерећење оператора. Овде оператер може узети више облика за производњу различитих резултата. Излаз функција варира овисно о различитим врстама и параметрима повратка, што је још један облик полиморфизма познат под називом Фунцтион Оверлоадинг. Овде функција има више облика да произведе више излаза.
Полиморфизам се увелико користи за спровођење наследства. Објекти који имају различиту унутрашњу структуру могу имплементирати заједничко сучеље кроз полиморфизам. Следећи дијаграм илуструје деловање полиморфизма:
Ова слика објашњава да је глина матични предмет од кога се праве лонци, посуде и играчки предмети. Сви ови предмети се разликују један од другог, али имају својства глине. Ова три предмета имају различите облике и користе се на различите начине чак и када су израђени од исте глине материјала.
Облици полиморфизма
Испод су два облика полиморфизма:
1. Преоптерећење оператера
Оператор може дати различите излазе на основу врсте операнда на којима ради. То се зове Оператор Оверлоадинг. Нпр., Оператор '+' може извршити сабирање на два цела броја, док може повезати два низа. Стога се исти оператор може користити на 2 различита начина. Оператор сабирања обично додаје два броја. Међутим, у случају сложених бројева, сабирање је мало другачије, где се одговарајући стварни делови и замишљени делови одвојено додају. Ево примера кода који показује како се оператер „+“ може преоптеретити за додавање сложених бројева:
Шифра:
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();
)
)
)
Излаз:
Као што сте можда приметили у коду, класа глине је родитељска класа чији су часови часови лонца, играчака и посуда. Метода 'Калуп' је дефинирана у родитељској класи као и подређеној класи с истим потписом функције. Дакле, када се створи објект дечије класе и он зове методу Молд, метода основне класе превладава надређеном методом класе. Стога видимо резултате методе дечије класе. Горња шифра приказује метод прегласавања и не преоптерећења за илустрацију полиморфизма.
Точке које треба имати на уму за полиморфизам у ц #
- Преоптерећење се разликује од прегласавања. Преоптерећење има различите потписе функција док прегласавање има исте потписе функција
- Полиморфизам се односи на промену понашања вишег разреда у подразреду.
- Насљеђивање се односи на кориштење структуре и понашања суперкласе у подразреду.
Следи неколико кључних поступака:
- Полиморфизам је једна од главних парадигми објектно оријентисаног програмирања.
- Преоптерећење функције мења функцију према типима повратка и параметрима функције у наслеђеној класи.
- Преоптерећење оператера мења дефиницију оператера према датим параметрима.
- Полиморфизам се користи да би се спровела одлука да се у време извођења одлучи да се назове метода класе детета коришћењем методе прегласавања.
Препоручени чланци
Ово је водич за полиморфизам у Ц #. Овде смо расправљали о два облика полиморфизма у Ц #, тј. Преоптерећење оператора и Преоптерећење оператора помоћу узорка кода. Такође можете погледати следећи чланак да бисте сазнали више -
- Шта је СтрингБуилдер у Ц #
- Копирајте конструктор у Ц #
- Шта је Мултитхреадинг у Ц #?
- Шта је образац дизајна у Ц #?
- Врсте конструктора у Ц # са имплементацијом кода
- Комплетан водич за мултитхреадинг у Ц #