Zalecane, 2024

Wybór Redakcji

Różnica między ref i out w C #

"Ref" i "Out" to modyfikatory parametrów używane w języku C #. Używając ref i out, możesz przekazać dowolny typ wartości poprzez odniesienie do dowolnej metody. Powód przekazywania dowolnego rodzaju wartości przez odniesienie wprowadza zasadniczą różnicę między słowem kluczowym ref i out. Słowo kluczowe ref pozwala wywoływanej metodzie zmienić treść argumentu przekazanego do niego słowem kluczowym ref. Słowo kluczowe out pozwala zwanej metodzie zwracać więcej niż jedną wartość w jednym wywołaniu. Przeanalizujmy różnicę między ref i out wraz z tabelą porównawczą.

Wykres porównania

Podstawa do porównaniaRefNa zewnątrz
PodstawowyPozwala na zmianę wartości argumentu z użyciem słowa kluczowego ref.Pozwala to na zwrócenie wartości poprzedzonych słowem kluczowym out.
InicjalizacjaParametr ref musi zostać zainicjowany przed wywołaniem metody.Parametr out musi zostać zainicjowany w wywołanej metodzie, zanim zostanie zakończony.
DeklaracjaParametr, który ma zostać zmieniony za pomocą metody, jest zadeklarowany jako ref przy deklaracji metody i wywołaniu metody.Zwracany parametr musi być zadeklarowany jako ref przy deklaracji metody i wywołaniu metody.

Definicja słowa kluczowego Ref

"Ref" jest modyfikatorem parametru używanym, gdy istnieje potrzeba wywołania metody z wywołaniem przez odniesienie. Kiedy chcemy, aby zmiany wprowadzone do argumentów wewnątrz wywoływanej metody musiały odzwierciedlać oryginalną wartość tej zmiennej, użyty zostanie modyfikator parametru ref. Typ wartości, który chcemy zadeklarować jako ref jest poprzedzony słowem kluczowym "ref" podczas deklaracji metody i wywoływania metod. Więcej niż jeden parametr można zadeklarować jako "ref" podczas wywoływania i deklarowania metody.

 używając System; class DemoRef {public void Square (ref int s) {s = s * s; }} klasa Ref_main {static void Main () {DemoRef ob = new DemoRef (); int a = 10; Console.WriteLine ("a before before method call:" + a); ob.square (ref a); // Używane słowo kluczowe Console.WriteLine ("a after call:" + a); }} // wypisz a przed wywołaniem metody: 10 a po wywołaniu metody: 100 

W powyższym kodzie zmienna "a" przekazywana jest jako argument do metody Square (ref a) wraz z dołączonym do niej modyfikatorem parametrów. Oznacza to wszelkie zmiany, jakie metoda Square (ref a) wykona dla zmiennej "a" wewnątrz, która odzwierciedli oryginalną wartość "a", również poza metodą.

Jest kilka ważnych punktów, które należy zapamiętać, gdy mamy do czynienia z modyfikatorem parametrów "ref".

  • Argument przekazywany przez ref do metody musi zostać zainicjowany przed wywołaniem metody.
  • Metoda nie może przypisać wartości początkowej do argumentu ref.
  • Możesz także użyć ref wraz ze zmienną referencyjną.

Definicja Out Keyword

Za każdym razem, gdy wywołasz metodę, zwracana jest tylko jedna wartość. Jeśli chcesz, aby metoda zwracała więcej niż jedną wartość w wywołaniu, słowo kluczowe "out" musi być używane wraz z parametrami, które chcesz zwrócić po zakończeniu metody. Czasami jest tak, że gdy nie chcemy niczego przekazać do metody, ale chcemy, aby metoda zwracała coś, używamy parametrów z outowym słowem kluczowym. Rozumiem to na przykładzie.

 używając System; class DemoOut {public int Decompose (double x, out double fraction) {int whole_num; whole_num = (int) x; ułamek = x - cały_num; return whole_num; }} class Out_maint {static void Main () {DemoOut ob = new DemoOut (); int i; podwójny frac; i = ob.Dompompose (100.125, out frac); // użyte słowo kluczowe Console.WriteLine ("Ogólna liczba części to" + i); Console.WriteLine ("część ułamkowa to" + frac); }} // output Liczba całkowita to 100 Część ułamkowa to 0, 125 

W powyższym kodzie dwie wartości zwracane są przez metodę Decompose (). Jeden zwraca przez słowo kluczowe "return", np. Whole_num, a drugi zwraca parametr poprzedzony przez słowo kluczowe out podczas wywoływania metody, np. "Frac".

Ważne punkty do zapamiętania na temat słowa kluczowego out.

  • W przeciwieństwie do słowa kluczowego ref, parametr używający słowa kluczowego out nie może być inicjowany przed wywołaniem metody.
  • Wywołana metoda sama przydzieli wartość parametrowi outowemu słowu kluczowemu, ponieważ jest uważana za nieprzypisaną w wywołanej metodzie, tzn. Zakłada się, że nie ma wartości początkowej.
  • Wywoływana metoda musi przypisać wartość do parametru wyjściowego przed zakończeniem tej metody.
  • Słowo kluczowe out odnosi się również do zmiennej referencyjnej.

Kluczowe różnice między Ref i Out w C #

  1. Kiedy zmienna poprzedzona słowem kluczowym ref jest przekazywana do dowolnej metody, zmiany wprowadzone do niej w metodzie odzwierciedlają jej pierwotną wartość. Gdy zmienna przekazana do metody jest poprzedzona przez słowo kluczowe out, metoda zwraca ją bez użycia słowa kluczowego return.
  2. Parametr ref powinien zostać zainicjowany przed przekazaniem do metody. Z drugiej strony, parametr out musi zostać zainicjowany wewnątrz metody, do której jest przekazywany.
  3. Podczas wywoływania, deklarowania lub definiowania metody parametr ref jest jawnie zadeklarowany jako ref. Z drugiej strony podczas wywoływania, deklarowania lub definiowania metody parametr out jest jawnie deklarowany jako out.

Wniosek:

Ilekroć zmienna ma być przekazana przez odniesienie do metody, można użyć słowa kluczowego ref i out. Natomiast powód użycia obu słów kluczowych jest inny, gdy słowo kluczowe ref może być użyte do zmiany wartości argumentu poprzedzonego słowem kluczowym ref, przekazane do wywoływanej metody, a słowo kluczowe out użyte do zwrócenia wartości argumentu poprzedzonego przez słowo kluczowe out.

Top