Overzicht overbelasting in C #

In Overloading in C # is polymorfisme een concept van objectgeoriënteerd programmeren dat het vermogen van een object, een variabele of een methode definieert om meerdere vormen aan te nemen tijdens het compileren / uitvoeren. De real-time factoren zoals gegevens, parameters, retourneren een object, enz. Bepalen welke vorm het object / de methode / variabele aanneemt. Hierdoor kan de programmeur meer generiek in plaats van specifiek coderen. Je eet bijvoorbeeld fruit. Hoe u fruit eet, hangt af van het fruit dat u in realtime wordt verstrekt. Je eet meteen een appel terwijl je een banaan schilt voordat je gaat eten. Gemakkelijk.

Wat is methode-overbelasting in C #?

Methode Overbelasting is de compilatie-implementatie van het concept van polymorfisme. Ontwikkelaars kunnen vergelijkbare methoden met dezelfde naam definiëren, die verschillen in het aantal argumenten, de volgorde van argumenten of het type argumenten. In het voorbeeld van fruit hoeft u geen afzonderlijke methoden voor elk fruit te definiëren (eatApple, eet de banaan, enz.). Je kunt dezelfde naam gebruiken om fruit te eten en er verschillende parameters aan door te geven. De compiler roept automatisch de juiste methode op.

Laten we nu het perspectief van C # nemen. In de meest eenvoudige termen is Methode Overbelasting in C # wanneer u twee of meer methoden hebt met dezelfde naam maar verschillende handtekeningen. Dit kan op verschillende manieren worden bereikt:

  • Het verschillende aantal parameters.
  • Verschillende soorten parameters.
  • Verschillende volgorde van parameters.
  • Optionele parameters.
  • Genoemde argumenten.

Hoe werkt methode-overbelasting in C #?

Dus, hoe wordt de juiste methode genoemd op basis van de argumenten / parameters? Welnu, de compiler controleert voor elke methodedefinitie tijdens het compileren en bindt de methodeaanroepen aan respectieve definities. Als er twee methoden met dezelfde naam zijn, controleert de compiler vervolgens de handtekening van de methoden en bindt de juiste definitie aan de aanroep. Zelfs als de handtekeningen de dubbelzinnigheid niet kunnen oplossen, zoekt de compiler naar de impliciete conversie van argumenten die overeenkomen met de handtekeningen. Als een impliciete conversie een handtekeningovereenkomst oplevert, is de binding voltooid. Zo niet, dan genereert de compiler een fout.

We zullen in dit artikel verschillende voorbeelden bekijken om de werking van de compiler in verschillende soorten methode-overbelasting te begrijpen.

Typen methode-overbelasting in C #

Hier bespreken we de verschillende soorten methode-overbelasting in C # die hieronder worden gegeven:

1. Verschillend aantal parameters

De eerste en de eenvoudigste categorie overbelasting van methoden is wanneer de methoden een ander aantal parameters in hun handtekeningen hebben.

Code

Het onderstaande voorbeeld is vrij eenvoudig en is een no-brainer.

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

Output:

2. Verschillende soorten parameters

Wanneer de methodehandtekeningen een parameter (s) hebben die verschillen in de typen. Het aantal parameters kan al dan niet hetzelfde zijn.

voorbeeld 1

In het onderstaande voorbeeld verwachten beide methoden een enkel argument. Dus, gebaseerd op het type argument dat is doorgegeven tijdens de methodeaanroep, bindt de compiler de juiste methodedefinitie.

Code

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

Output:

Voorbeeld 2

Laten we de compiler nu iets te denken geven. We zouden een dubbele en een float-type methode overbelasten. We weten dat een geheel getal altijd impliciet kan worden omgezet in een floattype en een dubbel type.

Wanneer we een argument voor gehele getallen doorgeven, controleert de compiler op impliciete conversie en constateert dat de best mogelijke conversie een te zweven geheel getal is. Daarom wordt de float-methode genoemd.

Code

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

Output:

3. Verschillende volgorde van parameters

Wanneer het aantal en het type argumenten hetzelfde zijn, maar de volgorde waarin ze worden doorgegeven verschilt.

voorbeeld 1

Het onderstaande voorbeeld is vrij eenvoudig.

Code

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

Output:

Voorbeeld 2

Wat zou er gebeuren als we in het bovenstaande voorbeeld twee argumenten met gehele getallen doorgeven? Laten we het uitzoeken.

Code

Func(10, 1);

Output:

4. Optionele parameters

Wanneer we een optionele parameter definiëren in de methodehandtekening, behandelt de compiler deze als methodeoverbelasting.

Opmerking: dit heeft voorrang op impliciete conversie.

Laten we dit met een voorbeeld begrijpen.

Voorbeeld

In het onderstaande voorbeeld geven we de compiler twee keuzes. Het kan het argument impliciet omzetten in overeenstemming met de methodehandtekening. Of het kan de standaardwaarde van het optionele argument doorgeven. De compiler geeft de voorkeur aan de laatste benadering.

Code

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

Output:

5. Genoemde argumenten

C # heeft een ander kenmerk van het doorgeven van de naam van de argumenten tijdens het aanroepen van de methode. Dit helpt ook bij het overbelasten van de methode. Ontwikkelaars kunnen ervoor kiezen om een ​​bepaalde methode aan te roepen, zelfs als het doorgegeven argument standaard een andere methode zou hebben genoemd. Hoewel, de overbelaste methoden moeten verschillen in de handtekening.

Voorbeeld

In het onderstaande voorbeeld instrueren we de compiler om een ​​bepaalde methode aan te roepen door de naam van de parameter door te geven. De compiler schort vervolgens zijn logica op om de meest geschikte methode te bepalen.

Code

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

Output:

Regels van methode overbelasting in C #

De volgende regels moeten in gedachten worden gehouden bij het overbelasten van methoden in uw C # -toepassing.

  • De methodehandtekening moet anders zijn. Het aantal argumenten, het type argumenten of de volgorde van argumenten moet verschillend zijn.
  • Het retourtype van de methoden speelt geen enkele rol bij het overbelasten van de methode.
  • Optionele parameters hebben voorrang op impliciete typeconversie bij het beslissen welke methode-definitie moet worden gebonden.
  • Impliciete typeconversie heeft voorrang op de methode van de bovenliggende klasse.
    Oefening - Om dit te begrijpen, hier is een kleine oefening voor u. Maak een bovenliggende klasse met een methode die een geheel getal verwacht Een onderliggende klasse overnemen. Overbelast de methode van de bovenliggende klasse in de onderliggende klasse, zodat de onderliggende klassenmethode een dubbel type argument verwacht. Maak een object van onderliggende klasse en roep de overbelaste methode aan die een geheel getal doorgeeft. Kijken wat er gebeurt.

Conclusie

Overbelasting van methoden is een redelijk krachtig concept. Het is erg handig bij het schrijven van elegante code. Toch kan het zover gaan dat tientallen methoden overbelast zijn en de ontwikkelaar de methodedefinities moet doorverwijzen terwijl hij de foutieve aanroepen debugt. Om dit te voorkomen, wordt vaak voorgesteld om uw methoden anders te noemen wanneer overbelasting de neiging heeft om naar een hoger niveau te schalen.

Aanbevolen artikelen

Dit is een gids voor overbelasting in C #. Hier bespreken we de methode, hoe werkt het, typen met voorbeelden en regels. U kunt ook onze andere voorgestelde artikelen doornemen voor meer informatie -

  1. C # While Loop
  2. C # als Verklaring
  3. C # Functies
  4. Gebruik van C #
  5. Gids voor overbelasting in C ++
  6. Overbelasting in Java
  7. Python overbelast
  8. Overbelasting en opheffen in C #
  9. Typ conversie in Java met typen en voorbeelden