Yleiskatsaus C #: n ylikuormituksesta

C #: n ylikuormituksen yhteydessä polymorfismi on olio-ohjelmoinnin käsite, joka määrittelee objektin, muuttujan tai menetelmän kyvyn ottaa useita muotoja käännös- / ajon aikana. Reaaliaikaiset tekijät, kuten data, parametrit, kohteen palautus jne., Määräävät, minkä muodon kohde / menetelmä / muuttuja ottaa. Tämän avulla ohjelmoija voi koodata yleisemmän kuin erityisen. Syö esimerkiksi hedelmiä. Kuinka syöt hedelmiä, riippuu heille toimitetuista hedelmistä reaaliajassa. Syö omena heti, kun kuorit banaanin ennen syömistä. Yksinkertainen.

Mikä on menetelmän ylikuormitus C #: ssä?

Menetelmä Ylikuormitus on polymorfismin käsitteen käännösaikainen toteutus. Kehittäjät voivat määritellä samanlaiset menetelmät samalla nimellä, eroavat joko argumenttien lukumäärästä, argumenttijärjestyksestä tai argumenttiluokasta. Hedelmien esimerkissä sinun ei tarvitse määritellä erillisiä menetelmiä jokaiselle hedelmälle (eatApple, syö banaania jne.). Voit käyttää samaa nimeä hedelmien syömiseen ja siirtää sille erilaisia ​​parametreja. Kääntäjä soittaa automaattisesti sopivalle menetelmälle.

Otetaan nyt C #: n näkökulma. Yksinkertaisin sanoin menetelmän ylikuormitus C #: ssä on, kun sinulla on kaksi tai useampia menetelmiä, joilla on sama nimi, mutta eri allekirjoitukset. Tämä voidaan saavuttaa monin tavoin:

  • Eri lukumäärä parametreja.
  • Erityyppiset parametrit.
  • Eri parametrijärjestys.
  • Valinnaiset parametrit.
  • Nimetyt argumentit.

Kuinka menetelmän ylikuormitus toimii C #: ssä?

Joten kuinka sopivaa menetelmää kutsutaan argumentteihin / parametreihin perustuen? No, kääntäjä tarkistaa jokaisen menetelmän määritelmän käännöksen aikana ja sitoo menetelmän kutsut vastaaviin määritelmiin. Jos on kaksi menetelmää, joilla on sama nimi, kääntäjä tarkistaa sitten menetelmien allekirjoituksen ja sitoo asianmukaisen määritelmän puheluun. Vaikka allekirjoitukset eivät ratkaise epäselvyyttä, kääntäjä etsii argumenttien implisiittistä muuntamista vastaamaan allekirjoituksia. Jos implisiittinen muuntaminen johtaa allekirjoitusotteluun, sidonta tehdään. Jos ei, kääntäjä aiheuttaa virheen.

Tarkastelemme erilaisia ​​esimerkkejä koko artikkelissa ymmärtääksesi kääntäjän työskentelyä erityyppisissä menetelmien ylikuormituksissa.

Menetelmän ylikuormitustyypit C #: ssä

Tässä keskustellaan alla esitetyistä erityyppisistä menetelmien ylikuormituksista C #: ssä:

1. Eri lukumäärä parametreja

Ensimmäinen ja yksinkertaisin menetelmän ylikuormitusluokka on, kun menetelmillä on eri määrä parametreja allekirjoituksissaan.

Koodi

Alla oleva esimerkki on melko suoraviivainen ja ei-braineri.

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

lähtö:

2. Erityyppiset parametrit

Kun menetelmän allekirjoituksilla on tyyppiä olevat parametrit, jotka eroavat toisistaan. Parametrien lukumäärä voi olla sama tai ei.

Esimerkki 1

Seuraavassa esimerkissä molemmat menetelmät vaativat yhden argumentin. Joten metodikutsun aikana välitetyn argumentin tyypin perusteella kääntäjä sitoo asianmukaisen menetelmän määritelmän.

Koodi

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

lähtö:

Esimerkki 2

Antakaamme nyt kääntäjälle jotain ajatella. Ylikuormittaisimme kaksinkertaisen ja kelluvan tyyppisen menetelmän. Tiedämme, että kokonaisluku voidaan aina epäsuorasti muuntaa kelluvaksi ja kaksinkertaiseksi.

Kun lähetämme kokonaislukuargumentin, kääntäjä tarkistaa implisiittisen muuntamisen ja toteaa, että paras mahdollinen muunnos on kokonaisluku kelluvaksi. Siksi float-menetelmää kutsutaan.

Koodi

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

lähtö:

3. Eri parametrijärjestys

Kun argumenttien lukumäärä ja tyyppi ovat samat, mutta niiden välitysjärjestys eroaa.

Esimerkki 1

Alla oleva esimerkki on melko suoraviivainen.

Koodi

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

lähtö:

Esimerkki 2

Mitä tapahtuisi, kun lähetämme kaksi kokonaislukua argumenttia yllä olevassa esimerkissä? Otetaan selvää.

Koodi

Func(10, 1);

lähtö:

4. Valinnaiset parametrit

Kun määrittelemme valinnaisen parametrin menetelmän allekirjoituksessa, kääntäjä käsittelee sitä menetelmän ylikuormituksena.

Huomaa: Tämä on etusijalla implisiittiseen muuntamiseen nähden.

Ymmärtäkäämme se esimerkillä.

esimerkki

Alla olevassa esimerkissä annamme kääntäjälle kaksi vaihtoehtoa. Joko se voi implisiittisesti muuntaa argumentin vastaamaan menetelmän allekirjoitusta. Tai se voi siirtää valinnaisen argumentin oletusarvon. Kääntäjä pitää parempana jälkimmäistä lähestymistapaa.

Koodi

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

lähtö:

5. Nimetyt väitteet

C #: llä on toinen ominaisuus siirtää argumenttien nimi samalla kun kutsutaan menetelmää. Tämä auttaa myös menetelmän ylikuormituksessa. Kehittäjät voivat halutessaan kutsua tiettyä menetelmää, vaikka hyväksytty argumentti olisi oletuksena nimeltään toinen menetelmä. Ylikuormitettujen menetelmien on kuitenkin oltava erilaisia ​​allekirjoituksessa.

esimerkki

Oheisessa esimerkissä kehotamme kääntäjää kutsumaan tiettyä menetelmää antamalla parametrin nimi. Kääntäjä keskeyttää sen jälkeen logiikan parhaiten sopivan menetelmän määrittämiseksi.

Koodi

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

lähtö:

Menetelmän ylikuormitussäännöt C #: ssä

Seuraavat säännöt on pidettävä mielessä, kun ylikuormitat menetelmiä C # -sovelluksessasi.

  • Menetelmän allekirjoituksen on oltava erilainen. Joko argumenttien lukumäärän, argumenttityypin tai argumenttijärjestyksen on oltava erilaiset.
  • Menetelmien palautustyypillä ei ole merkitystä menetelmän ylikuormituksessa.
  • Valinnaiset parametrit ovat etusijalla implisiittiseen tyyppimuunnokseen nähden päättäessään, mitä menetelmämääritystä sitoa.
  • Implisiittinen tyyppimuutos on etusijalla vanhemman luokan menetelmään nähden.
    Liikunta - Ymmärtääksesi tämän, tässä on pieni harjoitus sinulle. Luo vanhempi luokka menetelmällä, joka odottaa kokonaisluvun peri lapsiluokan. Ylikuormita menetelmä vanhemmaluokasta lapsiluokassa siten, että lastenluokan menetelmä odottaa kaksoistyyppiargumentin. Luo lastenluokan objekti ja kutsu ylikuormitettu menetelmä kokonaisluvun ohittamiseen. Katso mitä tapahtuu.

johtopäätös

Menetelmän ylikuormitus on melko tehokas käsite. Se on erittäin hyödyllinen tyylikkään koodin kirjoittamisessa. Se voi kuitenkin mennä jossain määrin, kun kymmeniä menetelmiä on ylikuormitettu, ja kehittäjän on viitattava menetelmämääritelmiin virheenkorjaamalla virheellisiä puheluita. Tämän välttämiseksi on usein suositeltavaa nimetä menetelmäsi toisin, kun ylikuormituksella on taipumus skaalautua korkeammalle tasolle.

Suositellut artikkelit

Tämä on opas C #: n ylikuormitukseen. Tässä keskustellaan sen menetelmästä, miten se toimii, tyyppejä esimerkillä ja säännöillä. Voit myös käydä läpi muiden ehdotettujen artikkeleidemme saadaksesi lisätietoja -

  1. C # Vaikka silmukka
  2. C # jos lausunto
  3. C # toiminnot
  4. C #: n käyttö
  5. Opas ylikuormitukseen C ++: ssa
  6. Ylikuormitus Java-sovelluksessa
  7. Pythonin ylikuormitus
  8. Ylikuormitus ja ohittaminen C #: ssä
  9. Tyyppimuutos Java-tyypeillä ja -esimerkkeillä