Pregled preobremenitve v C #

Pri preobremenitvi v C # je polimorfizem koncept objektno usmerjenega programiranja, ki definira zmožnost predmeta, spremenljivke ali metode za prevzem več oblik med časom prevajanja / izvajanja. Faktorji v realnem času, kot so podatki, parametri, vrnejo predmet itd., Določajo, kakšno obliko bo predmet / metoda / spremenljivka prevzel. To programerju omogoča, da kodira bolj splošne in ne posebne. Npr., Jeste sadje. Kako jeste sadje, je odvisno od sadja, ki vam ga je bilo zagotovljeno v realnem času. Jabolko pojeste takoj, ko olupite banano pred jedjo. Preprosto.

Kaj je metoda preobremenitev v C #?

Metoda Preobremenitev je časovna implementacija koncepta polimorfizma. Razvijalci lahko podobne metode opredelijo z istim imenom, pri čemer se razlikujejo po številu argumentov, vrstnem redu argumentov ali vrsti argumentov. Na primeru sadja ni treba določiti ločenih metod za vsako sadje (jestiApple, jesti banano itd.). Z istim imenom lahko jeste sadje in mu posredujete različne parametre. Prevajalnik bi samodejno poklical ustrezno metodo.

Vzemimo perspektivo C # zdaj. Najenostavneje povedano, metoda Preobremenitev v C # je, če imate dve ali več metod z istim imenom, vendar različnimi podpisi. To lahko dosežemo na različne načine:

  • Različno število parametrov.
  • Različne vrste parametrov.
  • Drugačen vrstni red parametrov.
  • Izbirni parametri.
  • Imenovani argumenti.

Kako deluje preobremenitev metode v C #?

Kako se torej imenuje ustrezna metoda na podlagi argumentov / parametrov? No, prevajalnik med kompilacijo preveri vsako definicijo metode in veže klice metode na ustrezne definicije. Če obstajata dve metodi z istim imenom, prevajalnik preveri podpis metod in na klic veže ustrezno definicijo. Tudi če podpisi ne morejo razrešiti dvoumnosti, prevajalnik išče implicitno pretvorbo argumentov, da se ujema s podpisi. Če se zaradi implicitne pretvorbe ujema s podpisom, je vezava opravljena. Če ni, prevajalnik ustvari napako.

V tem članku si bomo ogledali različne primere, da bomo razumeli delovanje prevajalnika v različnih vrstah preobremenitve metod.

Vrste preobremenitve metode v C #

Tukaj razpravljamo o različnih vrstah preobremenitve metode v C # so podane spodaj:

1. Različno število parametrov

Prva in najpreprostejša kategorija preobremenitve metode je, ko imajo metode v podpisu različno število parametrov.

Koda

Spodnji primer je dokaj preprost in je brez možganov.

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

Izhod:

2. Različne vrste parametrov

Kadar imajo podpisi metode parametre, ki se razlikujejo v vrstah. Število parametrov je lahko ali ne bo isto.

Primer 1

V spodnjem primeru obe metodi pričakujeta en argument. Torej, na podlagi vrste argumenta, posredovanega med klicem metode, prevajalnik veže ustrezno definicijo metode.

Koda

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

Izhod:

Primer 2

Zdaj pa dajmo prevajalcu nekaj za razmislek. Preobremenili bi metodo dvojnega in plovnega tipa. Vemo, da se celo število lahko vedno implicitno pretvori v float tip kot v dvojni tip.

Ko posredujemo argument s celim številom, prevajalnik preveri implicitno pretvorbo in ugotovi, da je najboljša možna pretvorba celo število, ki se plava. Zato se imenuje float metoda.

Koda

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

Izhod:

3. Različen vrstni red parametrov

Ko sta število in vrsta argumentov enaka, se vrstni red njihovega posredovanja razlikuje.

Primer 1

Spodnji primer je precej preprost.

Koda

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

Izhod:

Primer 2

Kaj bi se zgodilo, ko v zgornjem primeru posredujemo dva cela argumenta? Pa ugotovimo.

Koda

Func(10, 1);

Izhod:

4. Izbirni parametri

Ko v podpisu metode določimo izbirni parameter, ga prevajalnik obravnava kot preobremenitev metode.

Opomba: To ima prednost pred implicitno pretvorbo.

Naj to razumemo s primerom.

Primer

V spodnjem primeru dajemo prevajalcu dve izbiri. Argument lahko implicitno pretvori tako, da se ujema z podpisom metode. Lahko pa prenese tudi privzeto vrednost izbirnega argumenta. Prevajalnik daje prednost slednjemu pristopu.

Koda

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

Izhod:

5. Imenovani argumenti

C # ima še eno značilnost posredovanja imena argumentov med klicanjem metode. To pomaga tudi pri preobremenitvi metod. Razvijalci se lahko odločijo, da pokličejo določeno metodo, tudi če bi argument, ki je bil poslan, privzeto imenovan drug. Čeprav se morajo preobremenjeni načini v podpisu razlikovati.

Primer

V spodnjem primeru naročimo prevajalcu, da pokliče določeno metodo s prenosom imena parametra. Prevajalnik nato ustavi svojo logiko določanja najbolj primerne metode.

Koda

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

Izhod:

Pravila preobremenitve metode v C #

Pri preobremenitvi načinov v aplikaciji C # morate upoštevati naslednja pravila.

  • Podpis metode mora biti drugačen. Število argumentov, vrsta argumentov ali vrstni red argumentov mora biti različen.
  • Vrnitvena metoda ne igra nobene vloge pri preobremenitvi metode.
  • Neobvezni parametri imajo prednost pred implicitno pretvorbo tipa, ko se odločajo, katero definicijo metode bomo vezali.
  • Neizmerna pretvorba vrst ima prednost pred metodo nadrejenega razreda.
    Vaja - Če želite to razumeti, je tukaj nekaj vaje za vas. Ustvarite nadrejeni razred z metodo, ki pričakuje, da bo celo število Dedoval otroški razred. Metodo preobremenite iz nadrejenega razreda v otroškem razredu, tako da metoda otroškega razreda pričakuje argument dvojnega tipa. Ustvarite objekt otroškega razreda in pokličite preobremenjeno metodo, ki prenese celo število. Poglejte, kaj se zgodi.

Zaključek

Metoda preobremenitve je dokaj močan koncept. Pri pisanju elegantne kode je zelo koristno. Kljub temu lahko pride do te mere, da je na desetine metod preobremenjenih, razvijalci pa se morajo pri odpravljanju napačnih klicev napotiti na definicije metode. Da bi se temu izognili, pogosto priporočamo, da svoje metode poimenujete drugače, ko se preobremenitve ponavadi višje.

Priporočeni članki

To je priročnik za preobremenitev v C #. Tukaj razpravljamo o njegovi metodi, kako deluje, vrste s primeri in pravili. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. C # Medtem ko je zanka
  2. C # če Izjava
  3. C # funkcije
  4. Uporabe C #
  5. Vodnik za preobremenitev v C ++
  6. Preobremenitev na Javi
  7. Python preobremenitev
  8. Preobremenitev in preglasitev v C #
  9. Vtipkajte pretvorbo v Javi s tipi in primeri