Omówienie przeciążania w C #

W przeciążaniu w C #, polimorfizm jest koncepcją programowania obiektowego, która określa zdolność obiektu, zmiennej lub metody do przyjmowania wielu form podczas kompilacji / wykonywania. Czynniki w czasie rzeczywistym, takie jak dane, parametry, zwracany obiekt itp. Określają, jaką formę przybierze obiekt / metoda / zmienna. To pozwala programiście pisać bardziej ogólne niż szczegółowe. Np. Jesz owoce. Sposób jedzenia owoców zależy od owoców dostarczanych w czasie rzeczywistym. Od razu jesz jabłko, a przed jedzeniem obierasz banana. Prosty.

Co to jest przeciążenie metody w C #?

Metoda Overloading to implementacja koncepcji polimorfizmu w czasie kompilacji. Programiści mogą definiować podobne metody o tej samej nazwie, różniące się liczbą argumentów, kolejnością argumentów lub rodzajem argumentów. W przykładzie owoców nie musisz definiować osobnych metod dla każdego owocu (jeść Jabłko, jeść banana itp.). Możesz użyć tej samej nazwy, aby jeść owoce i przekazywać im różne parametry. Kompilator automatycznie wywoła odpowiednią metodę.

Przyjrzyjmy się teraz perspektywie C #. Mówiąc najprościej, przeciążanie metod w języku C # ma miejsce, gdy masz dwie lub więcej metod o tej samej nazwie, ale różnych podpisach. Można to osiągnąć na różne sposoby:

  • Inna liczba parametrów.
  • Różne rodzaje parametrów.
  • Inna kolejność parametrów.
  • Parametry opcjonalne.
  • Nazwane argumenty.

Jak działa metoda Overloading w C #?

Jak zatem wywoływana jest odpowiednia metoda na podstawie argumentów / parametrów? Kompilator sprawdza każdą definicję metody podczas kompilacji i wiąże wywołania metod z odpowiednimi definicjami. W przypadku, gdy istnieją dwie metody o tej samej nazwie, kompilator sprawdza podpis metod i wiąże odpowiednią definicję z wywołaniem. Nawet jeśli podpisy nie są w stanie rozwiązać niejednoznaczności, kompilator szuka niejawnej konwersji argumentów w celu dopasowania do podpisów. Jeśli niejawna konwersja spowoduje dopasowanie sygnatury, wiązanie zostanie wykonane. Jeśli nie, kompilator generuje błąd.

Przyjrzymy się różnym przykładom w tym artykule, aby zrozumieć działanie kompilatora w różnych typach przeciążania metod.

Rodzaje metod Przeciążanie w C #

Tutaj omawiamy różne typy przeciążania metod w C # podano poniżej:

1. Różna liczba parametrów

Pierwszą i najprostszą kategorią przeciążenia metody jest sytuacja, gdy metody mają inną liczbę parametrów w swoich sygnaturach.

Kod

Poniższy przykład jest prosty i nie wymaga myślenia.

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

Wynik:

2. Różne typy parametrów

Gdy podpisy metody mają parametry, które różnią się typami. Liczba parametrów może, ale nie musi być taka sama.

Przykład 1

W poniższym przykładzie obie metody oczekują pojedynczego argumentu. Tak więc, na podstawie typu argumentu przekazanego podczas wywołania metody, kompilator wiąże odpowiednią definicję metody.

Kod

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

Wynik:

Przykład 2

Dajmy teraz kompilatorowi coś do przemyślenia. Przeładowalibyśmy metodę podwójną i typu zmiennoprzecinkowego. Wiemy, że liczbę całkowitą zawsze można niejawnie przekonwertować na typ zmiennoprzecinkowy, a także na typ podwójny.

Kiedy przekazujemy argument liczby całkowitej, kompilator sprawdza niejawną konwersję i stwierdza, że ​​najlepszą możliwą konwersją jest liczba całkowita, która może być zmiennoprzecinkowa. Dlatego wywoływana jest metoda float.

Kod

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

Wynik:

3. Inna kolejność parametrów

Gdy liczba i rodzaj argumentów są takie same, ale kolejność ich przekazywania jest różna.

Przykład 1

Poniższy przykład jest dość prosty.

Kod

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

Wynik:

Przykład 2

Co by się stało, gdybyśmy przekazali dwa argumenty całkowite w powyższym przykładzie? Dowiedzmy Się.

Kod

Func(10, 1);

Wynik:

4. Parametry opcjonalne

Kiedy definiujemy opcjonalny parametr w sygnaturze metody, kompilator traktuje go jako przeciążenie metody.

Uwaga: Ma to pierwszeństwo przed niejawną konwersją.

Pozwól nam to zrozumieć na przykładzie.

Przykład

W poniższym przykładzie dajemy kompilatorowi dwie możliwości. Albo może niejawnie przekonwertować argumentu, aby pasował do podpisu metody. Lub może przekazać domyślną wartość opcjonalnego argumentu. Kompilator preferuje to drugie podejście.

Kod

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

Wynik:

5. Nazwane argumenty

C # ma inną funkcję przekazywania nazw argumentów podczas wywoływania metody. Pomaga to również w przeciążeniu metody. Deweloperzy mogą wybrać wywołanie określonej metody, nawet jeśli przekazany argument domyślnie wywołałby inną metodę. Chociaż przeciążone metody muszą różnić się podpisami.

Przykład

W poniższym przykładzie instruujemy kompilator, aby wywoływał określoną metodę, przekazując nazwę parametru. Następnie kompilator zawiesza logikę określania najlepiej dopasowanej metody.

Kod

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

Wynik:

Zasady przeciążania metod w C #

Podczas przeciążania metod w aplikacji C # należy pamiętać o następujących zasadach.

  • Podpis metody musi być inny. Liczba argumentów, rodzaj argumentów lub ich kolejność muszą być różne.
  • Zwracany typ metod nie odgrywa żadnej roli w przeciążaniu metod.
  • Parametry opcjonalne mają pierwszeństwo przed niejawną konwersją typu przy podejmowaniu decyzji, która definicja metody ma zostać powiązana.
  • Konwersja typu niejawnego ma pierwszeństwo przed metodą klasy nadrzędnej.
    Ćwiczenie - aby to zrozumieć, oto małe ćwiczenie dla ciebie. Utwórz klasę nadrzędną za pomocą metody oczekującej liczby całkowitej Dziedzicz klasę podrzędną. Przeciąż metodę z klasy nadrzędnej w klasie podrzędnej, tak aby metoda klasy podrzędnej oczekiwała argumentu podwójnego typu. Utwórz obiekt klasy potomnej i wywołaj przeciążoną metodę, przekazując liczbę całkowitą. Zobacz co się dzieje.

Wniosek

Przeciążenie metody to dość potężna koncepcja. Jest to bardzo pomocne w pisaniu eleganckiego kodu. Może się jednak okazać, że dziesiątki metod są przeciążone, a programista musi odwoływać się do definicji metod podczas debugowania błędnych wywołań. Aby tego uniknąć, często sugeruje się, aby nazwać metody inaczej, gdy przeciążenie ma tendencję do skalowania na wyższy poziom.

Polecane artykuły

Jest to przewodnik po przeciążaniu w C #. Tutaj omawiamy jego metodę, jak to działa, typy z przykładem i reguły. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. C # While Loop
  2. Instrukcja C # if
  3. Funkcje C #
  4. Zastosowania C #
  5. Przewodnik po przeciążaniu w C ++
  6. Przeciążenie w Javie
  7. Przeciążenie Pythona
  8. Przeciążanie i zastępowanie w C #
  9. Konwersja typów w Javie z typami i przykładami