Преглед преоптерећења у Ц #

Код преоптерећења у Ц #, полиморфизам је концепт објектно оријентисаног програмирања који дефинише способност објекта, променљиве или метода да преузме више облика током компајлирања / извођења. Фактори у стварном времену, као што су подаци, параметри, враћају објект итд. Одређују у каквом ће облику бити предмет / метода / променљива. То омогућава програмеру да кодира више генерички, а не специфично. Нпр., Једете воће. Како ћете јести воће, зависи од воћа које вам је достављено у реалном времену. Одмах поједете јабуку, док огулите банану пре јела. Једноставно.

Шта је преоптерећење метода у Ц #?

Метода Преоптерећење је имплементација концепта полиморфизма у току компилације. Програмери могу дефинисати сличне методе истим именом, разликујући се у броју аргумената, редоследу аргумената или врсти аргумената. На примјеру воћа, не морате да дефинишете одвојене методе за свако воће (јестиАппле, јести банану итд.). Можете користити исто име да једете воће и пребаците му различите параметре. Компајлер ће аутоматски позвати одговарајући метод.

Узмимо сада перспективу Ц #. Најједноставније речено, преоптерећење метода у Ц # је када имате две или више метода истог имена, али различите потписе. То се може постићи на различите начине:

  • Различити број параметара.
  • Различите врсте параметара.
  • Другачији редослед параметара.
  • Необавезни параметри.
  • Именовани аргументи.

Како функционира преоптерећење метода у Ц #?

Па, како се зове одговарајућа метода заснована на аргументима / параметрима? Па, преводилац проверава сваку дефиницију методе током компилације и веже позиве метода за одговарајуће дефиниције. У случају да постоје две методе са истим именом, преводилац проверава потпис метода и везује одговарајућу дефиницију за позив. Чак и ако потписи не могу да разреше двосмисленост, преводилац тражи имплицитну конверзију аргумената да би се подударали са потписима. Ако имплицитна конверзија резултира подударањем потписа, везивање се врши. Ако није, преводилац генерише грешку.

Размотрићемо различите примере у овом чланку да бисмо разумели рад преводиоца у различитим врстама преоптерећења метода.

Врсте метода преоптерећења у Ц #

Овде смо размотрили различите врсте преоптерећења метода у Ц # дате су у наставку:

1. Различит број параметара

Прва и најједноставнија категорија преоптерећења методе је када методе имају различит број параметара у свом потпису.

Код

Примјер у наставку је прилично јасан и не мисли.

using System;
public class Program
(
public static void Main()
(
Func(10);)
public static void Func(int a)
(
Console.WriteLine("Single Parameter");
)public static void Func(int a, int b)
(
Console.WriteLine("Multiple Parameters");
)
)

Излаз:

2. Различите врсте параметара

Кад потписи методе имају параметре који се разликују у типовима. Број параметара може бити, али не мора бити исти.

Пример 1

У доњем примјеру обје методе очекују један аргумент. Дакле, на основу врсте аргумента прослеђеног током позива методе, преводилац веже одговарајућу дефиницију метода.

Код

using System;
public class Program
(
public static void Main()
(
Func("Hello World");
)
public static void Func(int a)
(
Console.WriteLine("Integer Parameter");
)
public static void Func(string b)
(Console.WriteLine("String Parameter");
)
)

Излаз:

Пример 2

Дајмо сада преводиоцу нешто да размисли. Преоптеретили бисмо двоструку и пловну методу. Знамо да се цели број увек може имплицитно претворити у флоат тип као и у доубле тип.

Кад проследимо целобројни аргумент, преводилац проверава да ли постоји имплицитна конверзија и открива да је најбоља могућа конверзија цео број који плута. Отуда се зове флоат метода.

Код

using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
public static void Func(float b)
(
Console.WriteLine("Floating Point Parameter");
)
)

Излаз:

3. Другачији редослед параметара

Када су број и врста аргумената исти, али редослед њиховог доношења разликује се.

Пример 1

Пример испод је прилично јасан.

Код

using System;
public class Program
(
public static void Main()
(
Func(10, 0.1);
)
public static void Func(int a, double b)
(
Console.WriteLine("Int-Double Parameters");
)
public static void Func(double a, int b)
(
Console.WriteLine("Double-Int Parameter");
)
)

Излаз:

Пример 2

Шта би се догодило када у горњем примеру наведемо два цела аргумента? Хајде да сазнамо.

Код

Func(10, 1);

Излаз:

4. Необвезни параметри

Кад у потпису методе дефинирамо опционални параметар, преводилац то третира као преоптерећење методе.

Напомена: Ово има предност над нејасном конверзијом.

Разумејмо то на примеру.

Пример

У доњем примеру дајемо преводиоцу два избора. Или може имплицитно претворити аргумент да би одговарао потпису методе. Или може пренијети задану вриједност опционалног аргумента. Компајлер преферира други приступ.

Код

using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(int a, int b = 1)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
)

Излаз:

5. Именовани аргументи

Ц # има још једну карактеристику преношења имена аргумената током позива методе. Ово такође помаже у преоптерећењу метода. Програмери могу да одлуче да позову одређени метод, чак и ако би аргумент који је пренесен подразумевано назвао другим методом. Иако се преоптерећене методе морају разликовати у потпису.

Пример

У примјеру у наставку, дајемо упуте компајлеру да позове одређену методу тако што ће пренијети име параметра. Компајлер тада обуставља своју логику одређивања најбоље прилагођене методе.

Код

using System;
public class Program
(
public static void Main()
(
Func(b: 10);
)
public static void Func(int a)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double b)
(
Console.WriteLine("Double Parameter");
)
)

Излаз:

Правила преоптерећења метода у Ц #

Следећа правила морате имати на уму током преоптерећења метода у вашој Ц # апликацији.

  • Потпис метода мора бити различит. Или број аргумената, врста аргумената или редослед аргумената морају бити различити.
  • Повратна врста метода не игра никакву улогу у преоптерећењу метода.
  • Необавезни параметри имају предност над конверзијом имплицитних типова када одлучују коју дефиницију метода треба да вежемо.
  • Претворба нејасних врста има предност над методом надређене класе.
    Вежба - Да бисте то разумели, ево мало вежбе за вас. Креирајте родитељску класу методом која очекује да ће цела вредност наследити дечију класу. Метод преоптерећите из родитељске класе у дечијем разреду тако да метода класичне класе очекује аргумент двоструког типа. Креирајте објект подређене класе и назовите преоптерећен метод пролазећи цијели број. Види шта се дешава.

Закључак

Преоптерећење метода је прилично моћан концепт. Веома је корисно у писању елегантног кода. Па ипак, може доћи до оне мере када је на десетке метода преоптерећено, а програмер мора упутити дефиниције метода док отклањање погрешних позива. Да бисте то избегли, често се предлаже да другачије именујете своје методе када се преоптерећење тежи ка вишем нивоу.

Препоручени чланци

Ово је водич за преоптерећење у Ц #. Овде смо расправљали о његовој Методи, како функционише, типовима примера и правилима. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -

  1. Ц # Док се петља
  2. Ц # иф Изјава
  3. Ц # функције
  4. Употребе Ц #
  5. Водич за преоптерећење у Ц ++
  6. Преоптерећење у Јави
  7. Питхон Оверлоадинг
  8. Преоптерећење и прегласавање у Ц #
  9. Конверзија типа у Јави помоћу типова и примера

Категорија: