Prezentare generală asupra supraîncărcării în C #

În supraîncărcare în C #, Polimorfismul este un concept de programare orientat pe obiect care definește capacitatea unui obiect, a unei variabile sau a unei metode de a-și asuma mai multe forme în timpul compilării / rulării. Factorii în timp real, cum ar fi datele, parametrii, returnarea unui obiect etc. determină ce formă va lua obiectul / metoda / variabila. Acest lucru permite programatorului să codifice mai mult generice, mai degrabă decât specifice. De exemplu, mănânci fructe. Modul în care mănânci fructele depinde de fructele furnizate în timp real. Mănânci imediat un măr, în timp ce coji o banană înainte de a mânca. Simplu.

Care este metoda supraîncărcării în C #?

Metoda Supraîncărcarea este implementarea în timp a compilării conceptului de polimorfism. Dezvoltatorii pot defini metode similare cu același nume, diferind fie numărul de argumente, ordinea argumentelor, fie tipul de argumente. În exemplul fructelor, nu trebuie să definiți metode separate pentru fiecare fruct (eatApple, mâncați banana etc.). Puteți utiliza același nume pentru a mânca fructe și a-i trece parametri diferiți. Compilatorul va apela automat la metoda corespunzătoare.

Să luăm acum perspectiva C #. În termenii cei mai simpli, supraîncărcarea metodei în C # este atunci când aveți două sau mai multe metode cu același nume, dar semnături diferite. Acest lucru poate fi realizat în diferite moduri:

  • Numărul diferit de parametri.
  • Diferite tipuri de parametri.
  • Ordine diferită de parametri.
  • Parametri opționali.
  • Argumente numite.

Cum funcționează supraîncărcarea metodei în C #?

Deci, cum se numește metoda adecvată bazată pe argumente / parametri? Ei bine, compilatorul verifică fiecare definiție a metodei în timpul compilării și leagă apelurile la metodă la definițiile respective. În cazul în care există două metode cu același nume, compilatorul verifică semnătura metodelor și leagă definiția corespunzătoare apelului. Chiar dacă semnăturile nu pot rezolva ambiguitatea, compilatorul caută conversia implicită a argumentelor care să corespundă semnăturilor. Dacă o conversie implicită are ca rezultat o potrivire a semnăturii, legarea se face. Dacă nu, compilatorul generează o eroare.

Vom analiza diverse exemple din acest articol pentru a înțelege funcționarea compilatorului în diferite tipuri de supraîncărcare a metodei.

Tipuri de suprasarcină în C #

Aici vom discuta despre diferitele tipuri de supraîncărcare a metodei în C # sunt prezentate mai jos:

1. Număr diferit de parametri

Prima și cea mai simplă categorie de supraîncărcare a metodei este atunci când metodele au un număr diferit de parametri în semnăturile lor.

Cod

Exemplul de mai jos este destul de simplu și este un dezacord.

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

ieşire:

2. Diferite tipuri de parametri

Când semnăturile metodei au un parametru (parametri) diferiți de tipuri. Numărul de parametri poate fi sau nu același.

Exemplul 1

În exemplul de mai jos, ambele metode se așteaptă la un singur argument. Deci, pe baza tipului de argument transmis în timpul apelului la metodă, compilatorul leagă definiția corespunzătoare a metodei.

Cod

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

ieşire:

Exemplul 2

Acum, să oferim compilatorului ceva de gândit. Am supraîncărca o metodă dublă și plutitoare. Știm că un număr întreg poate fi întotdeauna implicit convertit într-un tip float, precum și într-un tip dublu.

Când trecem un argument întreg, compilatorul verifică conversia implicită și constată că cea mai bună conversie posibilă este un număr întreg care să plutească. Prin urmare, se numește metoda float.

Cod

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

ieşire:

3. Ordine diferite de parametri

Când numărul și tipul de argumente sunt aceleași, dar ordinea în care sunt transmise diferă.

Exemplul 1

Exemplul de mai jos este destul de simplu.

Cod

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

ieşire:

Exemplul 2

Ce s-ar întâmpla când trecem două argumente întregi în exemplul de mai sus? Să aflăm.

Cod

Func(10, 1);

ieşire:

4. Parametri opționali

Când definim un parametru opțional în semnătura metodei, compilatorul îl tratează ca o suprasarcină a metodei.

Notă: Aceasta are prioritate asupra conversiei implicite.

Să înțelegem acest lucru cu un exemplu.

Exemplu

În exemplul de mai jos, oferim compilatorului două opțiuni. Fie se poate converti implicit argumentul pentru a se potrivi cu semnătura metodei. Sau poate trece valoarea implicită a argumentului opțional. Compilatorul preferă ultima abordare.

Cod

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

ieşire:

5. Argumente numite

C # are o altă caracteristică de transmitere a numelui argumentelor în timp ce apelăm la metodă. Acest lucru ajută și la supraîncărcarea metodei. Dezvoltatorii pot alege să apeleze la o anumită metodă chiar dacă argumentul transmis ar fi numit implicit o altă metodă. Deși, metodele supraîncărcate trebuie să difere în semnătură.

Exemplu

În exemplul de mai jos, instruim compilatorul să apeleze la o anumită metodă trecând numele parametrului. Compilatorul își suspendă apoi logica de determinare a celei mai potrivite metode.

Cod

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

ieşire:

Reguli de suprasarcină în C #

Următoarele reguli trebuie reținute în timp ce supraîncărcați metodele din aplicația dvs. C #.

  • Semnătura metodei trebuie să fie diferită. Numărul de argumente, tipul de argumente sau ordinea argumentelor trebuie să fie diferite.
  • Tipul de retur al metodelor nu joacă niciun rol în supraîncărcarea metodei.
  • Parametrii opționali au prioritate asupra conversiei de tip implicit atunci când decid ce definiție a metodei se leagă.
  • Conversia de tip implicit are prioritate față de metoda clasei părinte.
    Exercițiu - Pentru a înțelege acest lucru, iată un mic exercițiu pentru tine. Creați o clasă părinte cu o metodă care se așteaptă la un număr întreg Moștenire o clasă copil. Supraîncărcați metoda din clasa părinte din clasa copil, astfel încât metoda clasei copil așteaptă un argument de tip dublu. Creați un obiect din clasa copil și apelați la metoda supraîncărcată trecând un număr întreg. Vezi ce se intampla.

Concluzie

Supraîncărcarea metodei este un concept destul de puternic. Este foarte util în scrierea unui cod elegant. Cu toate acestea, poate merge într-o măsură în care zeci de metode sunt supraîncărcate, iar dezvoltatorul trebuie să trimită definițiile metodei în timp ce depanează apelurile eronate. Pentru a evita acest lucru, se recomandă adesea denumirea metodelor dvs. în mod diferit atunci când supraîncărcarea tinde să se extindă la un nivel superior.

Articole recomandate

Acesta este un ghid pentru supraîncărcare în C #. Aici vom discuta despre metoda sa, cum funcționează, tipuri cu exemplu și reguli. Puteți parcurge și alte articole sugerate pentru a afla mai multe -

  1. C # În timp ce buclă
  2. C # dacă declarație
  3. C # Funcții
  4. Utilizări ale C #
  5. Ghid pentru supraîncărcare în C ++
  6. Supraîncărcare în Java
  7. Supraîncărcarea Python
  8. Supraîncărcare și suprasolicitare în C #
  9. Tastați conversia în Java cu tipuri și exemple