Ülevaade ülekoormamisest C # -s

C # ülekoormamise korral on polümorfism objektorienteeritud programmeerimise kontseptsioon, mis määratleb objekti, muutuja või meetodi võime eeldada kompileerimise / käitamise ajal mitut vormi. Reaalajas tegurid, nagu andmed, parameetrid, objekti tagastamine jne, määravad selle, millise vormi objekt / meetod / muutuja võtab. See võimaldab programmeerijal kodeerida pigem üldise kui konkreetse. Nt sööte puuvilju. See, kuidas sa puuvilju sööd, sõltub reaalajas pakutavatest puuviljadest. Sa sööd õuna kohe, koorid enne söömist aga banaani. Lihtne.

Mis on meetodi ülekoormamine C # -s?

Meetodi ülekoormamine on polümorfismi kontseptsiooni kompileeritav aeg. Arendajad saavad määratleda sarnaseid meetodeid sama nime all, erinedes nii argumentide arvust, argumentide järjekorrast kui ka argumentide tüübist. Puuviljanäites ei pea te iga puuvilja jaoks eraldi meetodeid määratlema (söömaApple, söö banaani jne). Puuviljade söömiseks võite kasutada sama nime ja anda sellele erinevaid parameetreid. Kompilaator helistaks automaatselt sobivale meetodile.

Vaadakem nüüd C # vaatenurka. Kõige lihtsamalt öeldes tähendab meetod C # ülekoormamist siis, kui teil on kaks või enam sama nimega, kuid erinevate allkirjadega meetodit. Seda on võimalik saavutada mitmel viisil:

  • Erinev arv parameetreid.
  • Erinevat tüüpi parameetrid.
  • Parameetrite erinev järjekord.
  • Valikulised parameetrid.
  • Nimega argumendid.

Kuidas C-meetodis meetodi ülekoormamine toimib?

Niisiis, kuidas nimetatakse sobivat meetodit argumentide / parameetrite põhjal? Noh, kompilaator kontrollib kompileerimise ajal iga meetodi määratlust ja seob meetodi kõned vastavate määratlustega. Kui on kaks sama nimega meetodit, kontrollib kompilaator seejärel meetodite allkirja ja seob kõnega vastava määratluse. Isegi kui allkirjad ei suuda ebaselgust lahendada, otsib kompilaator argumentide kaudset teisendamist allkirjadele vastavaks. Kui kaudse teisendamise tulemuseks on allkirjade vaste, siis sidumine toimub. Kui ei, siis loob kompilaator vea.

Vaatleme kogu selle artikli erinevaid näiteid, et mõista kompilaatori toimimist erinevat tüüpi meetodi ülekoormamisel.

C-meetodi ülekoormamise tüübid

Siin käsitleme allpool C-tüüpi meetodi eri tüüpi ülekoormamise meetodeid:

1. Erinev arv parameetreid

Esimene ja lihtsaim meetodikategooria ülekoormamise kategooria on see, kui meetodite allkirjades on erinev arv parameetreid.

Kood

Allpool toodud näide on üsna sirgjooneline ja mõtlematu.

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äljund:

2. Erinevat tüüpi parameetrid

Kui meetodi allkirjadel on parameetrid, siis tüübid erinevad. Parameetrite arv võib olla sama või mitte.

Näide 1

Allpool toodud näites eeldavad mõlemad meetodid ühte argumenti. Niisiis seob kompilaator meetodikõne käigus edastatud argumendi tüübi põhjal vastava meetodi määratluse.

Kood

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äljund:

Näide 2

Andkem nüüd koostajale midagi mõelda. Me koormaksime topelt- ja ujukitüüpi meetodit üle. Me teame, et täisarvu saab alati kaudselt teisendada nii ujuk- kui ka topelttüübiks.

Arvuargumendi edastamisel kontrollib kompilaator implitsiitset teisendust ja leiab, et parim võimalik teisendus on täisarv, mis hõljub. Seega nimetatakse float-meetodit.

Kood

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äljund:

3. Parameetrite erinev järjekord

Kui argumentide arv ja tüüp on samad, kuid nende esitamise järjekord on erinev.

Näide 1

Allpool toodud näide on üsna sirgjooneline.

Kood

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äljund:

Näide 2

Mis juhtuks, kui ületaksime ülaltoodud näites kaks täisarvu argumenti? Uurime välja.

Kood

Func(10, 1);

Väljund:

4. Valikulised parameetrid

Kui määratleme meetodi allkirjas valikulise parameetri, siis käsitleb kompilaator seda meetodi ülekoormusena.

Märkus. See on ülimuslik kaudse muundamise ees.

Mõistagem seda näitega.

Näide

Allpool toodud näites anname koostajale kaks valikut. Mõlemad võivad argumendi kaudselt teisendada meetodi allkirjaga vastavaks. Või võib see ületada valikulise argumendi vaikeväärtuse. Kompilaator eelistab viimast lähenemist.

Kood

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äljund:

5. Nimega argumendid

C # -l on veel üks omadus - argumendi nime sisestamine meetodi kutsumisel. See aitab ka meetodi ülekoormamisel. Arendajad saavad valida kindla meetodi nimetamise, isegi kui edastatud argument oleks vaikimisi nimetanud teist meetodit. Kuid ülekoormatud meetodid peavad allkirjas erinema.

Näide

Allolevas näites juhendame kompilaatorit helistama konkreetsele meetodile, edastades parameetri nime. Seejärel peatab kompilaator oma sobivaima meetodi määramise loogika.

Kood

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äljund:

Meetodi ülekoormamise reeglid C # -s

C # rakenduses meetodite ülelaadimisel tuleb silmas pidada järgmisi reegleid.

  • Meetodi allkiri peab olema erinev. Kas argumentide arv, argumentide tüüp või argumentide järjekord peavad olema erinevad.
  • Meetodite tagastamise tüüp ei mängi meetodi ülekoormamisel mingit rolli.
  • Valitavad parameetrid eelistavad implitseeritud tüübi teisendamist, kui nad otsustavad, millist meetodi määratlust siduda.
  • Tüüpiline kaudne teisendus on ülimuslik põhiklassi meetodi suhtes.
    Harjutus - selle mõistmiseks on siin teile väike harjutus. Looge vanemklass meetodiga, mis eeldab täisarvu pärandamist lasteklassile. Laadige lasteklassis meetod vanemklassist üle nii, et lasteklassi meetod eeldaks topelttüübi argumenti. Looge lasteklassi objekt ja kutsuge täisarvust mööduv ülekoormatud meetod. Vaadake, mis juhtub.

Järeldus

Meetodi ülekoormamine on üsna võimas kontseptsioon. Elegantse koodi kirjutamisest on väga palju abi. Kuid kümnete meetodite ülekoormamise korral võib see minna teatud määral ja arendaja peab vigaste kõnede silumisel viitama meetodimääratlustele. Selle vältimiseks soovitatakse sageli nimetada oma meetodid teisiti, kui ülekoormus kipub ulatuma kõrgemale tasemele.

Soovitatavad artiklid

See on juhend C # ülekoormamise kohta. Siin käsitleme selle meetodit, kuidas see töötab, tüübid näite ja reeglitega. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. C # Kuigi silmus
  2. C # kui avaldus
  3. C # funktsioonid
  4. Kasutab C #
  5. Juhend C ++ ülekoormamise kohta
  6. Ülekoormus Java-s
  7. Pythoni ülekoormamine
  8. C-numbri ülekoormamine ja alistamine
  9. Tüübi teisendus Java-s koos tüüpide ja näidetega

Kategooria: