Сравнителна таблица
Основа за сравнение | Ref | от |
---|---|---|
Основен | Тя позволява промяната в стойността на аргумента, продължена с ключовата дума ref. | Тя позволява на метод да върне стойностите, предшествани от ключова дума out. |
Инициализация | Параметърът ref трябва да се инициализира преди извикването на метода. | Параметърът out трябва да се инициализира вътре в извикания метод, преди той да бъде прекратен. |
декларация | Параметърът, който трябва да бъде променен от метод, се декларира като ref, докато декларацията за метод и извикването на метода. | Параметърът, който трябва да бъде върнат, трябва да бъде деклариран като ref, докато декларацията за метод и извикването на метода. |
Дефиниция на ключовата дума Ref
"Ref" е модификатор на параметър, който се използва, когато има нужда от извикване на метод с повикване по референция. Когато искаме промените, направени в аргументите вътре в наричания метод, трябва да се отразят в първоначалната стойност на тази променлива, тогава се използва модификаторът на параметъра ref. Типът на стойността, който искаме да декларираме като ref, се предхожда от ключовата дума „ref“ по време на декларирането на метода и при извикването на метода. Повече от един параметър може да бъде деклариран като “ref”, докато извиквате и декларирате метод.
използване на система; class DemoRef {публичен void Square (ref int s) {s = s * s; }} class Ref_main {static void Main () {DemoRef ob = нов DemoRef (); int a = 10; Console.WriteLine ("извикване преди метод:" + a); квадратен (ref a); // Използва се ref ключова дума Console.WriteLine ("след повикване:" + a); }} // извежда преди извикване на метод: 10 a след извикване на метод: 100
В горния код променливата 'a' се предава като аргумент на метода Square (ref a) заедно с модификатора на параметъра ref, приложен към него. Това означава каквито и да са промените, които методът Square (ref a) ще извърши върху променливата 'a' вътре, ще се отрази в първоначалната стойност на 'a', извън метода също.
Има някои важни точки, които трябва да се помнят при работа с модификатор на параметри “ref”.
- Аргументът, който предавате от ref към метод, трябва да се инициализира преди извикването на метода.
- Методът не трябва да присвоява първоначалната стойност на аргумента ref.
- Можете също да използвате ref заедно с референтната променлива също.
Дефиниране на ключова дума Out
Всеки път, когато извикате метод, той ще върне само една стойност. Ако искате методът да върне повече от една стойност при повикване, трябва да се използва ключовата дума „out“ заедно с параметрите, които искате да върнете, когато методът бъде прекратен. Понякога случаят е, че когато не искаме да предадем нещо на метода, но искаме методът да върне нещо назад, използваме параметри с ключова дума out. Нека го разберем с един пример.
използване на система; class DemoOut {public int Decompose (двойна x, out двойна фракция) {int whole_num; whole_num = (int) x; фракция = x - цяло число; връщане на цялото; }} класа Out_maint {static void Main () {DemoOut ob = new DemoOut (); int i; двоен разрез; i = ob.Decompose (100.125, out frac); // използваната ключова дума Console.WriteLine ("Част от цялото число е" + i); Console.WriteLine ("фракционна част е" + frac); }} // Изход Целочислена част е 100 Дробната част е 0.125
В горния код се връщат две стойности от метода Decompose (). Едното се връща с ключовата дума “return”, т.е. whole_num, а другата връща параметър, предшестван от изходната ключова дума докато методът нарича “frac”.
Важните неща, които трябва да запомните за ключовата дума out.
- За разлика от ключовата дума ref, параметърът, използващ ключовата дума out, не трябва да се инициализира преди извикването на метода.
- Извиканият метод сам ще присвои стойност на параметъра с ключова дума out, тъй като тя се счита за неприсвоена вътре в наречения метод, т.е. приема се, че няма първоначална стойност.
- Извиканият метод трябва да присвои стойност на изходния параметър, преди методът да бъде прекратен.
- Ключовата дума out е приложима и за референтната променлива.
Ключови разлики между Ref и Out в C #
- Когато променлива, предшествана от ключовата дума ref, се предава на който и да е метод, тогава промените, направени в нея, отразяват първоначалната му стойност. Когато променливата, предадена на метод, се предшества от ключовата дума, методът го връща, без да използва ключовата дума return.
- Параметърът ref трябва да се инициализира, преди да бъде предаден на метод. От друга страна, out параметърът трябва да се инициализира вътре в метода, към който е предаден.
- Докато извиквате, декларирате или дефинирате метод, параметърът ref изрично се декларира като ref. От друга страна, при извикването, декларирането или дефинирането на метод out параметърът е изрично деклариран като out.
Заключение:
Всеки път, когато променливата трябва да бъде предадена от позоваването на метод, може да се използва ключовата дума ref и out. Като има предвид, че причината да се използват и двете ключови думи са различни, когато ключовата дума ref може да се използва за промяна на стойността на аргумента, предшестван от ключовата дума ref, предадена на извикания метод, а ключовата дума out се използва за връщане на стойността на предшестващия аргумент от ключовата дума out.