Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi ref a out v C #

"Ref" a "Out" sú modifikátory parametrov používané v C #. Použitím ref a out, môžete prejsť akýkoľvek typ hodnoty odkazom na ktorúkoľvek metódu. Dôvod odovzdania akéhokoľvek typu hodnoty svojou referenciou zavádza hlavný rozdiel medzi kľúčovým slovom ref a out. Kľúčové slovo ref umožňuje vyzvanú metódu zmeniť obsah argumentu, ktorý jej bol odoslaný pomocou kľúčového slova ref. Kľúčové slovo zvyčajne umožňuje zvolanie metódy vrátenia viac ako jednej hodnoty do jedného hovoru. Pozrime sa na rozdiel medzi ref a out spolu s porovnávacou tabuľkou.

Porovnávacia tabuľka

Základ pre porovnanieRefVon
základnéUmožňuje zmenu hodnoty argumentu prebiehajúceho s ref keyword.Umožňuje metódu vrátenia týchto hodnôt, ktoré predchádza kľúčové slovo von.
inicializáciaParameter ref musí byť inicializovaný pred volaním metódy.Parameter out musí byť inicializovaný vo vnútri nazvanej metódy skôr, než skončí.
vyhlásenieParameter, ktorý má byť zmenený metódou, je deklarovaný ako ref, zatiaľ čo deklarácia metódy a volanie metódy.Parameter, ktorý sa má vrátiť, musí byť deklarovaný ako ref, zatiaľ čo deklarácia metódy a volanie metódy.

Definícia kľúčového slova Ref

"Ref" je modifikátor parametrov, ktorý sa používa v prípade, že je potrebné zavolať metódu s volaním podľa odkazu. Keď chceme, aby zmeny vykonané v argumentoch vnútri nazvanej metódy odrážali pôvodnú hodnotu tejto premennej, potom sa použije modifikátor parametrov ref. Typ hodnoty, ktorý chceme deklarovať ako odkaz, predchádza kľúčové slovo "ref" počas deklarovania metódy a volanie metódy. Viac ako jeden parameter sa môže deklarovať ako "ref" pri volaní a deklarovaní metódy.

 pomocou systému; trieda DemoRef {public void Square (ref int s) {s = s * s; }} ref_main {static void Hlavný () {DemoRef ob = nový DemoRef (); int a = 10; Console.WriteLine ("pred volaním metódy:" + a); obSquare (ref); // použitá ref Konzola kľúčových slov.WriteLine ("po hovore:" + a); }} // výstup pred volaním metódy: 10 a po výzve metódy: 100 

Vo vyššie uvedenom kóde sa premenná "a" odovzdá ako argument k metóde Square (ref a) spolu s modifikátorom parametrov ref pripojeným k nej. Znamená to, že akékoľvek zmeny, ktoré metóda Square (ref a) vykoná na premennej "a" vo vnútri, sa bude odrážať v pôvodnej hodnote metódy "a" mimo metódy.

Existujú niektoré dôležité body, ktoré treba pamätať pri práci s modifikátorom parametrov "ref".

  • Argument, ktorý odovzdáte odkazom na metódu, musí byť inicializovaný pred volaním metódy.
  • Metóda nesmie priradiť počiatočnú hodnotu argumentu ref.
  • Môžete tiež použiť ref spolu s referenčnou premennou tiež.

Definícia kľúčového slova mimo

Zakaždým, keď zavoláte metódu, vráti iba jednu hodnotu. Ak chcete počas hovoru vrátiť viac ako jednu hodnotu, kľúčové slovo "out" sa musí použiť spolu s parametrami, ktoré chcete vrátiť späť, keď sa metóda ukončí. Niekedy je to tak, že keď nechceme preniesť niečo do metódy, ale chceme, aby metóda vrátila niečo, čo používame parametre s kľúčovým slovom von. Chápeme to s príkladom.

 pomocou systému; trieda DemoOut {public int Rozklad (dvojnásobok x, dvojitá frakcia) {int whole_num; whole_num = (int) x; zlomok = x - celé číslo; vrátiť celú sadu; }} trieda Out_maint {static void Hlavná () {DemoOut ob = nová DemoOut (); int i; double frac; i = ob.Decompose (100, 125, von frac); // používa kľúčové slovo Console.WriteLine ("celá časť je" + i); Console.WriteLine ("zlomková časť je" + frac); }} // výstup Celočíselná časť je 100 Fraktálna časť je 0, 125 

Vo vyššie uvedenom kóde sa vrátia dve hodnoty pomocou metódy Decompose (). Jeden sa vracia kľúčovým slovom "návrat", tj celý_num a druhý vráti parameter, ktorý predchádza kľúčové slovo von, zatiaľ čo volanie metódy, tj "frac".

Dôležité body, ktoré si musíte zapamätať o kľúčových slovách.

  • Na rozdiel od kľúčového slova ref, parameter pred použitím kľúčového slova nesmie byť inicializovaný pred volaním metódy.
  • Zavolaná metóda sama priradí hodnotu parametru s kľúčovým slovom "out", pretože sa považuje za nepriradenú v rámci volanej metódy, tj predpokladá sa, že nemá žiadnu počiatočnú hodnotu.
  • Zavolaná metóda musí priradiť hodnotu parametru Out pred ukončením metódy.
  • Kľúčové slovo von sa vzťahuje aj na referenčnú premennú.

Kľúčové rozdiely medzi ref a out v C #

  1. Keď premenná, ktorej predchádza kľúčové slovo ref, je prenesená na akúkoľvek metódu, potom zmeny vykonané v rámci metódy odrážajú jej pôvodnú hodnotu. Keď premennú prechádzajúcu na metódu predchádza kľúčové slovo, metóda ju vráti bez použitia návratového kľúčového slova.
  2. Parameter ref by mal byť inicializovaný predtým, ako prešiel na metódu. Na druhej strane parameter out musí byť inicializovaný vo vnútri metódy, ktorou sa odovzdáva.
  3. Pri volaní, deklarovaní alebo definovaní metódy je parameter ref explicitne deklarovaný ako ref. Na druhej strane, pri volaní, deklarovaní alebo definovaní metódy, je parameter explicitne deklarovaný ako out.

záver:

Kedykoľvek má byť premenná prenesená odkazom na metódu, môže sa použiť kľúčové slovo ref a out. Zatiaľ čo dôvod použitia obidvoch kľúčových slov je iný, keď kľúčové slovo ref môže byť použité na zmenu hodnoty argumentu, ktorý predchádza ref ref. Kľúč, ktorý sa odovzdá metóde nazývanej a kľúčové slovo out sa používa na návrat hodnoty argumentu, ktorý predchádzal podľa kľúčového slova von.

Top