Pregled o preopterećenju u C #

U pretjeranom opterećenju u C #, polimorfizam je koncept objektno orijentiranog programiranja koji definira sposobnost objekta, varijable ili metoda za prihvaćanje više oblika tijekom vremena sastavljanja / izvođenja. Faktori u stvarnom vremenu kao što su podaci, parametri, vraćaju objekt itd. Određuju u kojem će se obliku objekt / metoda / varijabla poprimiti. To programeru omogućuje kodiranje više generičkog, a ne specifičnog. Npr., Jedete voće. Kako ćete jesti voće, ovisi o voću koje vam je osigurano u stvarnom vremenu. Jabuku pojedete odmah, dok ogulite bananu prije jela. Jednostavan.

Što je preopterećenje metode u C #?

Metoda Preopterećenje je implementacija koncepta polimorfizma u vremenu sastavljanja. Programeri mogu definirati slične metode istim imenom, razlikujući se u broju argumenata, redoslijedu argumenata ili vrsti argumenata. Na primjeru voća, ne morate definirati odvojene metode za svako voće (jestiApple, jesti bananu itd.). Možete koristiti isto ime da jedete voće i prebacite mu različite parametre. Prevoditelj bi automatski pozvao odgovarajuću metodu.

Uzmimo sada perspektivu C #. Najjednostavnije rečeno, preopterećenje metode u C # je kada imate dvije ili više metoda istog naziva, ali različite potpise. To se može postići na različite načine:

  • Različiti broj parametara.
  • Različite vrste parametara.
  • Različiti redoslijed parametara.
  • Neobvezni parametri.
  • Imenovani argumenti.

Kako funkcionira preopterećenje metoda u C #?

Pa, kako se naziva odgovarajuća metoda zasnovana na argumentima / parametrima? Pa, prevoditelj provjerava svaku definiciju metode tijekom kompilacije i veže pozive metode za odgovarajuće definicije. U slučaju da postoje dvije metode s istim nazivom, prevoditelj provjerava potpis metoda i na poziv veže odgovarajuću definiciju. Čak i ako se potpisi ne mogu riješiti nejasnoće, prevodilac traži implicitnu pretvorbu argumenata kako bi se podudarali s potpisima. Ako implicitna konverzija rezultira podudaranjem potpisa, uvezivanje se vrši. Ako ne, prevodilac generira pogrešku.

Razmotrit ćemo različite primjere u ovom članku kako bismo razumjeli rad prevoditelja u različitim vrstama preopterećenja metoda.

Vrste preopterećenja metoda u C #

Ovdje smo raspravljali o različitim vrstama preopterećenja metode u C # dane su u nastavku:

1. Različiti broj parametara

Prva i najjednostavnija kategorija preopterećenja metode je kada metode imaju različit broj parametara u svom potpisu.

Kodirati

Primjer u nastavku prilično je jasan i ne misli na njega.

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

Izlaz:

2. Različite vrste parametara

Kad potpisi metode imaju parametre koji se razlikuju u vrstama. Broj parametara može biti, ali ne mora biti isti.

Primjer 1

U primjeru u nastavku, obje metode očekuju jedan argument. Dakle, na temelju vrste argumenta prosljeđenog tijekom poziva metode, prevoditelj veže odgovarajuću definiciju metode.

Kodirati

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

Izlaz:

Primjer 2

Dajmo sada prevoditelju nešto za razmišljanje. Preopteretili bismo dvostruku i plovnu metodu. Znamo da se cijeli broj može implicitno pretvoriti u float tip kao i u double tip.

Kad prenosimo argument s cijelim brojem, prevoditelj provjerava ima li implicitna pretvorba i otkriva da je najbolja moguća pretvorba cijeli broj koji pluta. Otuda se zove float metoda.

Kodirati

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

Izlaz:

3. Različiti redoslijed parametara

Kad su broj i vrsta argumenata isti, ali redoslijed njihovog donošenja razlikuje se.

Primjer 1

Primjer u nastavku prilično je jasan.

Kodirati

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

Izlaz:

Primjer 2

Što bi se dogodilo kada u gornjem primjeru prenesemo dva cjelobrojna argumenta? Hajde da vidimo.

Kodirati

Func(10, 1);

Izlaz:

4. Neobvezni parametri

Kad u potpisu metode definiramo neobavezni parametar, prevoditelj to tretira kao preopterećenje metode.

Napomena: Ovo ima prednost nad implicitnom pretvorbom.

Shvatimo to primjerom.

Primjer

U primjeru u nastavku dajemo prevoditelju dva izbora. Ili može implicitno pretvoriti argument kako bi odgovarao potpisu metode. Ili može prenijeti zadanu vrijednost fakultativnog argumenta. Sastavljač preferira drugi pristup.

Kodirati

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

Izlaz:

5. Imenovani argumenti

C # ima još jednu značajku unošenja imena argumenata tijekom poziva metode. To pomaže i u preopterećenju metoda. Razvojni programeri mogu odlučiti nazvati određenu metodu čak i ako bi argument koji je prošao zadano nazvao drugom metodom. Iako se preopterećene metode moraju razlikovati u potpisu.

Primjer

U primjeru u nastavku, dajemo upute prevoditelju da pozove određenu metodu prosljeđujući naziv parametra. Tada prevoditelj zaustavlja svoju logiku određivanja najbolje prilagođene metode.

Kodirati

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

Izlaz:

Pravila preopterećenja metoda u C #

Sljedeća pravila morate imati na umu tijekom preopterećenja metoda u vašoj C # aplikaciji.

  • Potpis metode mora biti drugačiji. Ili broj argumenata, vrsta argumenata ili redoslijed argumenata moraju biti različiti.
  • Povratna vrsta metoda ne igra nikakvu ulogu u preopterećenju metode.
  • Neobavezni parametri imaju prednost nad pretvorbom implicitnih vrsta prilikom odlučivanja koja će se definicija metode povezati.
  • Pretpostavljena vrsta pretvorbe ima prednost nad metodom nadređene klase.
    Vježba - Da biste to razumjeli, evo vam malo vježbe. Napravite roditeljsku klasu metodom koja očekuje da će cijeli broj naslijediti podređenu klasu. Metodu preopterećite iz roditeljske klase u dječjoj klasi tako da metoda podređene klase očekuje argument dvostrukog tipa. Stvorite objekt podređene klase i nazovite preopterećenu metodu prolazeći cijeli broj. Pogledajte što se događa.

Zaključak

Preopterećenje metoda prilično je moćan koncept. Vrlo je korisno u pisanju elegantnog koda. Pa ipak, može doći do mjere kada je na desetke metoda preopterećeno, a programer mora uputiti definicije metoda tijekom uklanjanja pogrešnih pogrešnih poziva. Da biste to izbjegli, često se predlaže da svoje metode imenujete drugačije kada se preopterećenje teži skaliranju na višu razinu.

Preporučeni članci

Ovo je vodič za preopterećenje u C #. Ovdje smo raspravljali o njegovoj Metodi, kako ona djeluje, vrste s primjerom i pravilima. Možete i proći naše druge predložene članke da biste saznali više -

  1. C # Dok je petlja
  2. C # ako Izjava
  3. C # funkcije
  4. Upotrebe C #
  5. Vodič za preopterećenje u C ++
  6. Preopterećenje u Javi
  7. Python preopterećenje
  8. Preopterećenje i preglasavanje u C #
  9. Konverzija tipa u Javi s vrstama i primjerima

Kategorija: