Přehled o přetížení v C #

V přetížení v C # je polymorfismus koncept objektově orientovaného programování, který definuje schopnost objektu, proměnné nebo metody převzít více formulářů během kompilace / běhu. Faktory v reálném čase, jako jsou data, parametry, vrácení objektu atd., Určují, jakou formu bude mít objekt / metoda / proměnná. To umožňuje programátorovi kódovat spíše obecnější než konkrétní. Např. Jíte ovoce. Jak jíte ovoce, záleží na plodech, které vám jsou poskytovány v reálném čase. Okamžitě sníte jablko, zatímco před jídlem oloupáte banán. Jednoduchý.

Co je přetížení metody v C #?

Metoda Přetížení je kompilační implementace konceptu Polymorfismu. Vývojáři mohou definovat podobné metody se stejným názvem a liší se buď počtem argumentů, pořadí argumentů, nebo typem argumentů. V příkladu ovoce nemusíte definovat samostatné metody pro každé ovoce (eatApple, jíst banány atd.). Stejné jméno můžete použít k jídlu ovoce ak předávání různých parametrů. Kompilátor automaticky zavolá příslušnou metodu.

Podívejme se nyní na perspektivu C #. Zjednodušeně řečeno, přetížení metod v C # je, když máte dvě nebo více metod se stejným názvem, ale rozdílnými podpisy. Toho lze dosáhnout různými způsoby:

  • Různý počet parametrů.
  • Různé typy parametrů.
  • Různé pořadí parametrů.
  • Volitelné parametry.
  • Pojmenované argumenty.

Jak metoda Overloading funguje v C #?

Jak se tedy příslušná metoda nazývá na základě argumentů / parametrů? Kompilátor zkontroluje každou definici metody během kompilace a váže volání metody na příslušné definice. V případě, že existují dvě metody se stejným názvem, kompilátor poté zkontroluje podpis metod a váže příslušnou definici k volání. I když podpisy nedokážou vyřešit dvojznačnost, kompilátor hledá implicitní převod argumentů, aby odpovídal podpisům. Pokud implicitní konverze vede k shodě s podpisem, je vazba dokončena. Pokud ne, kompilátor vygeneruje chybu.

Podíváme se na různé příklady v tomto článku, abychom pochopili fungování kompilátoru v různých typech přetížení metody.

Typy přetížení metody v C #

Zde diskutujeme různé typy přetížení metod v C #:

1. Různý počet parametrů

První a nejjednodušší kategorie přetížení metody je, když metody mají ve svých podpisech jiný počet parametrů.

Kód

Níže uvedený příklad je docela přímočarý a není pouhý.

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ýstup:

2. Jiný typ parametrů

Když podpisy metody mají parametry, které se liší v typech. Počet parametrů může nebo nemusí být stejný.

Příklad 1

V níže uvedeném příkladu obě metody očekávají jediný argument. Takže na základě typu argumentu předaného během volání metody kompilátor váže definici příslušné metody.

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ýstup:

Příklad 2

Nyní dejte kompilátoru něco k zamyšlení. Přetížili bychom metodu typu double a float. Víme, že celé číslo lze vždy implicitně převést na plovákový i dvojitý typ.

Když předáme celočíselný argument, kompilátor zkontroluje implicitní převod a zjistí, že nejlepší možná konverze je celé číslo, které se vznáší. Proto se nazývá floatová metoda.

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ýstup:

3. Různé pořadí parametrů

Pokud je počet a typ argumentů stejný, ale pořadí jejich předávání se liší.

Příklad 1

Příklad níže je docela přímočarý.

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ýstup:

Příklad 2

Co by se stalo, kdybychom předali dva celé argumenty ve výše uvedeném příkladu? Pojďme to zjistit.

Kód

Func(10, 1);

Výstup:

4. Volitelné parametry

Když definujeme volitelný parametr v podpisu metody, kompilátor to považuje za přetížení metody.

Poznámka: Toto má přednost před Implicitní konverzí.

Rozumíme tomu na příkladu.

Příklad

V níže uvedeném příkladu dáváme kompilátoru dvě možnosti. Buď může implicitně převést argument tak, aby odpovídal podpisu metody. Nebo může předat výchozí hodnotu volitelného argumentu. Kompilátor upřednostňuje druhý pří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ýstup:

5. Pojmenované argumenty

C # má další funkci předávání názvu argumentů při volání metody. To také pomáhá při přetížení metody. Vývojáři se mohou rozhodnout zavolat konkrétní metodu, i když by předaný argument měl ve výchozím nastavení jinou metodu. Přetížené metody se však musí v podpisu lišit.

Příklad

V příkladu níže přikládáme kompilátoru, aby zavolal konkrétní metodu předáním názvu parametru. Kompilátor poté pozastaví svou logiku určování nejvhodnější metody.

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ýstup:

Pravidla přetížení metody v C #

Při přetížení metod v aplikaci C # je třeba mít na paměti následující pravidla.

  • Podpis metody musí být jiný. Počet argumentů, typ argumentů nebo pořadí argumentů musí být různé.
  • Návratový typ metod nehraje při přetížení metody žádnou roli.
  • Volitelné parametry mají přednost při převodu implicitních typů při rozhodování, která definice metody se má vázat.
  • Implicitní převod typu má přednost před metodou nadřazené třídy.
    Cvičení - Abyste to pochopili, je zde pro vás malé cvičení. Vytvořit nadřazenou třídu pomocí metody, která očekává, že celé číslo Zdědí podřízenou třídu. Přetěžujte metodu z nadřazené třídy v podřízené třídě tak, že metoda podřízené třídy očekává argument dvojitého typu. Vytvořte objekt podřízené třídy a zavolejte přetíženou metodu předáním celého čísla. Podívejte se, co se stane.

Závěr

Přetížení metod je poměrně silný koncept. Při psaní elegantního kódu je velmi užitečné. Přesto může do určité míry dojít k přetížení desítek metod a vývojář musí při ladění chybných volání odkazovat na definice metod. Aby se tomu zabránilo, často se doporučuje pojmenovat své metody odlišně, když přetížení má sklon k vyšším měřítkům.

Doporučené články

Toto je průvodce přetížením v C #. Zde diskutujeme o jeho metodě, jak to funguje, o příkladech a příkladech. Další informace naleznete také v dalších navrhovaných článcích -

  1. C # Zatímco smyčka
  2. C # if Prohlášení
  3. C # Funkce
  4. Použití C #
  5. Průvodce přetížením v C ++
  6. Přetížení v Javě
  7. Přetížení Pythonu
  8. Přetížení a přemostění v C #
  9. Převod typu v jazyce Java s typy a příklady

Kategorie: