Prehľad o preťažení v C #

V preťažení v C # je polymorfizmus koncept objektovo orientovaného programovania, ktorý definuje schopnosť objektu, premennej alebo metódy predpokladať viacnásobné formy počas kompilácie / behu. Faktory v reálnom čase, ako sú údaje, parametre, vrátenie objektu atď. Určujú, akú formu bude mať objekt / metóda / premenná. To umožňuje programátorovi kódovať skôr všeobecnejšie než špecificky. Napríklad, jete ovocie. To, ako jete ovocie, závisí od ovocia, ktoré vám bolo poskytnuté v reálnom čase. Okamžite budete jesť jablko, zatiaľ čo pred jedlom vylúpate banán. Jednoduchá.

Čo je preťaženie metód v C #?

Metóda Preťaženie je implementácia pojmu polymorfizmus v čase kompilácie. Vývojári môžu definovať podobné metódy pod rovnakým názvom, líšia sa počtom argumentov, poradím argumentov alebo typom argumentov. V príklade ovocia nemusíte definovať samostatné metódy pre každé ovocie (eatApple, jesť banány atď.). Rovnaký názov môžete použiť na jesť ovocie a odovzdávať do neho rôzne parametre. Kompilátor automaticky zavolá príslušnú metódu.

Pozrime sa teraz na perspektívu C #. Zjednodušene povedané, preťaženie metód v C # je, keď máte dve alebo viac metód s rovnakým názvom, ale rôznymi podpismi. To možno dosiahnuť rôznymi spôsobmi:

  • Rôzny počet parametrov.
  • Rôzne typy parametrov.
  • Rôzne poradie parametrov.
  • Voliteľné parametre.
  • Pomenované argumenty.

Ako funguje preťaženie metód v C #?

Ako sa teda volá príslušná metóda na základe argumentov / parametrov? Kompilátor skontroluje každú definíciu metódy počas kompilácie a spája volania metódy na príslušné definície. V prípade, že existujú dve metódy s rovnakým názvom, kompilátor potom skontroluje podpis metód a priradí príslušnú definíciu hovoru. Aj keď podpisy nedokážu vyriešiť nejednoznačnosť, kompilátor hľadá implicitnú konverziu argumentov tak, aby sa zhodovali s podpismi. Ak implicitná konverzia vedie k zhode s podpisom, väzba je vykonaná. Ak nie, kompilátor vygeneruje chybu.

Pozrime sa na rôzne príklady v tomto článku, aby sme pochopili fungovanie kompilátora pri rôznych typoch preťaženia metód.

Typy preťaženia metód v C #

Ďalej uvádzame rôzne typy preťaženia metód v C #:

1. Rôzny počet parametrov

Prvou a najjednoduchšou kategóriou preťaženia metódy je, keď metódy majú vo svojich podpisoch iný počet parametrov.

kód

Príklad uvedený nižšie je celkom priamočiary a nie je jasný.

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

Výkon:

2. Rôzne typy parametrov

Keď majú podpisy metódy parameter (parametre), ktoré sa líšia v typoch. Počet parametrov môže alebo nemusí byť rovnaký.

Príklad 1

V nasledujúcom príklade obe metódy očakávajú jediný argument. Takže na základe typu argumentu odovzdaného počas volania metódy kompilátor viaže príslušnú definíciu metódy.

kód

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

Výkon:

Príklad 2

Teraz dajme kompilátorovi niečo na zamyslenie. Preťažili by sme metódu typu double a float. Vieme, že celé číslo možno vždy implicitne premeniť na floatový aj dvojitý typ.

Keď odovzdáme celočíselný argument, kompilátor skontroluje implicitnú konverziu a zistí, že najlepšou možnou konverziou je celé číslo na float. Preto sa volá metóda float.

kód

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

Výkon:

3. Rôzne poradie parametrov

Ak je počet a typ argumentov rovnaký, ale poradie, v akom sú predložené, sa líši.

Príklad 1

Príklad uvedený nižšie je celkom priamy.

kód

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

Výkon:

Príklad 2

Čo by sa stalo, keby sme vo vyššie uvedenom príklade predložili dva celočíselné argumenty? Poďme zistiť.

kód

Func(10, 1);

Výkon:

4. Voliteľné parametre

Keď v podpise metódy definujeme voliteľný parameter, kompilátor ho považuje za preťaženie metódy.

Poznámka: Toto má prednosť pred implicitnou konverziou.

Pochopme to príkladom.

príklad

V nasledujúcom príklade dávame kompilátoru dve možnosti. Buď môže implicitne previesť argument tak, aby zodpovedal podpisu metódy. Alebo môže odovzdať predvolenú hodnotu voliteľného argumentu. Kompilátor uprednostňuje druhý prístup.

kód

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

Výkon:

5. Pomenované argumenty

C # má ďalšiu funkciu odovzdávania názvu argumentu pri volaní metódy. Pomáha to tiež pri preťažení metód. Vývojári sa môžu rozhodnúť zavolať konkrétnu metódu, aj keď by sa predaný argument predvolene nazýval inou metódou. Preťažené metódy sa však musia odlišovať v podpise.

príklad

V nižšie uvedenom príklade inštruujeme kompilátor, aby zavolal konkrétnu metódu odovzdaním názvu parametra. Kompilátor potom pozastaví svoju logiku určovania najvhodnejšej metódy.

kód

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

Výkon:

Pravidlá preťaženia metódy v C #

Pri preťažovaní metód v aplikácii C # musíte mať na pamäti nasledujúce pravidlá.

  • Podpis metódy musí byť iný. Počet argumentov, typ argumentov alebo poradie argumentov sa musia líšiť.
  • Návratový typ metód nehrá pri preťažení metód žiadnu úlohu.
  • Voliteľné parametre majú pri rozhodovaní, ktorá definícia metódy sa má naviazať, prednosť pred implicitnou konverziou typu.
  • Implicitná konverzia typu má prednosť pred metódou rodičovskej triedy.
    Cvičenie - Aby ste tomu porozumeli, tu je pre vás malé cvičenie. Vytvorte nadradenú triedu pomocou metódy, ktorá očakáva, že celé číslo zdedí podradenú triedu. Preťažte metódu z nadradenej triedy v podradenej triede tak, že metóda podradenej triedy očakáva argument dvojitého typu. Vytvorte objekt podradenej triedy a zavolajte preťaženú metódu odovzdaním celého čísla. Pozrite sa, čo sa stane.

záver

Preťaženie metód je pomerne silný koncept. Je veľmi užitočné pri písaní elegantného kódu. Môže však ísť do tej miery, keď sú preťažené desiatky metód, a vývojár musí odkázať definície metód a zároveň odladiť chybné volania. Aby ste tomu predišli, často sa odporúča pomenovať svoje metódy, keď preťaženie má sklon k vyššej úrovni.

Odporúčané články

Toto je sprievodca preťažením v C #. Tu diskutujeme o jej metóde, o tom, ako to funguje, o príkladoch a príkladoch. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. C # Kým Slučka
  2. C # if Vyhlásenie
  3. C # Funkcie
  4. Použitie C #
  5. Sprievodca preťažením v C ++
  6. Preťaženie v Jave
  7. Preťaženie Pythonu
  8. Preťaženie a prekonanie v C #
  9. Prevod typov v jazyku Java s typmi a príkladmi

Kategórie: