Oversigt over overbelastning i C #

Ved overbelastning i C # er Polymorphism et begreb med objektorienteret programmering, der definerer evnen af ​​et objekt, en variabel eller en metode til at antage flere former under kompilering / kørselstid. Faktum i realtid som data, parametre, returnering af et objekt osv. Bestemmer, hvilken form objektet / metoden / variablen har. Dette giver programmereren mulighed for at kode mere generisk snarere end specifik. F.eks. Spiser du frugt. Hvordan du spiser frugt afhænger af den frugt, du får i realtid. Du spiser et æble med det samme, mens du skræler en banan, før du spiser. Enkel.

Hvad er metodeoverbelastning i C #?

Metode Overbelastning er kompileringstiden implementering af begrebet polymorfisme. Udviklere kan definere lignende metoder med samme navn og afvige enten i antallet af argumenter, rækkefølge af argumenter eller typen af ​​argumenter. I eksemplet med frugter behøver du ikke definere separate metoder for hver frugt (eatApple, spis bananen osv.). Du kan bruge samme navn til at spise frugt og videregive forskellige parametre til det. Compileren kalder automatisk den passende metode.

Lad os tage perspektivet på C # nu. På de mest enkle termer er metodeoverbelastning i C #, når du har to eller flere metoder med samme navn, men forskellige underskrifter. Dette kan opnås på forskellige måder:

  • Det forskellige antal parametre.
  • Forskellige typer parametre.
  • Forskellig rækkefølge af parametre.
  • Valgfrie parametre.
  • Navngivne argumenter.

Hvordan fungerer overbelastning af metode i C #?

Så hvordan kaldes den passende metode baseret på argumenter / parametre? Nå, kompilatoren tjekker for hver metodedefinition under kompilering og binder metodekaldene til de respektive definitioner. I tilfælde af at der er to metoder med samme navn, kontrollerer kompilatoren derefter underskrift af metoderne og binder den passende definition til opkaldet. Selvom underskrifterne ikke kan løse tvetydigheden, ser kompilatoren efter den implicitte konvertering af argumenter, der svarer til underskrifterne. Hvis en implicit konvertering resulterer i en signaturkamp, ​​udføres bindingen. Hvis ikke genererer compileren en fejl.

Vi skal se på forskellige eksempler i hele denne artikel for at forstå, hvordan kompilatoren fungerer i forskellige typer metodeoverbelastning.

Typer af metodeoverbelastning i C #

Her diskuterer vi de forskellige typer metodeoverbelastning i C # nedenfor:

1. Forskellig antal parametre

Den første og den enkleste kategori af metodeoverbelastning er, når metoderne har et andet antal parametre i deres underskrifter.

Kode

Eksemplet nedenfor er temmelig ligetil og er en 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");
)
)

Produktion:

2. Forskellig type parametre

Når metodesignaturerne har en parameter (r), der er forskellige i typerne. Antallet af parametre er muligvis ikke det samme.

Eksempel 1

I eksemplet nedenfor forventer begge metoder et enkelt argument. Så baseret på typen af ​​argument, der blev sendt under metodekaldet, binder kompilatoren den passende metodedefinition.

Kode

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

Produktion:

Eksempel 2

Lad os nu give kompilatoren noget at tænke på. Vi vil overbelaste en dobbelt- og en float-metode. Vi ved, at et heltal altid implicit kan konverteres til en flydende type såvel som en dobbelt type.

Når vi passerer et heltalargument, kontrollerer compileren for implicit konvertering og finder ud af, at den bedst mulige konvertering er et heltal, der skal flydes. Derfor kaldes float-metoden.

Kode

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

Produktion:

3. Forskellig rækkefølge af parametre

Når antallet og typen af ​​argumenter er det samme, men rækkefølgen af ​​dem er forskellig.

Eksempel 1

Eksemplet nedenfor er ret ligetil.

Kode

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

Produktion:

Eksempel 2

Hvad ville der ske, når vi passerer to heltalargumenter i eksemplet ovenfor? Lad os finde ud af det.

Kode

Func(10, 1);

Produktion:

4. Valgfrie parametre

Når vi definerer en valgfri parameter i metodesignaturen, behandler kompilatoren den som metodeoverbelastning.

Bemærk: Dette har forrang for implicit konvertering.

Lad os forstå dette med et eksempel.

Eksempel

I eksemplet nedenfor giver vi kompilatoren to valg. Enten kan det implicit konvertere argumentet til at matche metodesignaturen. Eller det kan videregive standardværdien for det valgfrie argument. Compileren foretrækker sidstnævnte tilgang.

Kode

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

Produktion:

5. Navngivne argumenter

C # har en anden funktion ved at indtaste navnet på argumenterne, mens du kalder metoden. Dette hjælper også med overbelastning af metoden. Udviklere kan vælge at kalde en bestemt metode, selvom det givne argument som standard ville have kaldt en anden metode. Skønt de overbelastede metoder skal afvige i signaturen.

Eksempel

I eksemplet nedenfor instruerer vi kompilatoren til at kalde en bestemt metode ved at videregive navnet på parameteren. Compileren suspenderer derefter sin logik med at bestemme den bedst egnede metode.

Kode

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

Produktion:

Regler for metodeoverbelastning i C #

Følgende regler skal huskes, mens overbelastningsmetoder i din C # -applikation.

  • Metodesignaturen skal være anderledes. Antallet af argumenter, type argumenter eller rækkefølge af argumenter skal være forskelligt.
  • Metodernes returtype spiller ikke nogen rolle i metodeoverbelastning.
  • Valgfrie parametre har forrang frem for implicit type-konvertering, når de beslutter, hvilken metodedefinition, der skal bindes.
  • Implicit type-konvertering har forrang frem for moderklasse-metoden.
    Træning - For at forstå dette er her en lille øvelse for dig. Opret en overordnet klasse med en metode, der forventer, at et heltal arver en barneklasse. Overbelastning af metoden fra forældreklassen i barneklassen, således at barneklasse-metoden forventer et argument af dobbelt type. Opret et objekt fra underordnet klasse, og kald den overbelastede metode, der passerer et heltal. Se hvad der sker.

Konklusion

Overbelastning af metoden er et ret kraftigt koncept. Det er meget nyttigt at skrive elegant kode. Ikke desto mindre kan det gå i et omfang, hvor snesevis af metoder er overbelastet, og udvikleren skal henvise til metodedefinitionerne, mens den fejlsøger fejlagtige opkald. For at undgå dette foreslås det ofte at navngive dine metoder forskelligt, når overbelastning har tendens til at skalere til et højere niveau.

Anbefalede artikler

Dette er en guide til overbelastning i C #. Her diskuterer vi dens metode, hvordan fungerer det, typer med eksempler og regler. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. C # Mens Loop
  2. C # hvis erklæring
  3. C # Funktioner
  4. Anvendelser af C #
  5. Vejledning til overbelastning i C ++
  6. Overbelastning i Java
  7. Python-overbelastning
  8. Overbelastning og tilsidesættelse i C #
  9. Skriv konvertering i Java med typer og eksempler

Kategori: