Передача параметров по ссылке и по значению (ref и out)
Сайт создан в системе uCoz
Меню сайта


Поиск по сайту
Loading


Форма входа


Помощь проекту

PayPal:

LiqPay or Credit/Debit Card:

W1 "Единый кошелек":
199990419310
WebMoney:
WME - E509190786817
WMZ - Z195499640086
WMU - U204403357554
WMR - R280087882619




Активные темы

  • Все вопросы касающиеся Neil Scope (7126)
  • инвертор на микропроцессоре с 12\220v с синусом на выходе (3)
  • Предложения по работе сайта и форума (18)
  • Изготовление ПП (7)
  • NeiLogicAnalyzer (48)
  • Двухполярный линейный БП с управлением на МК (91)
  • Заказ плат под NeilScope3 (12.2015) (60)
  • Первое знакомство с микроконтроллерами Silabs (105)
  • Куплю плату NS-3 (0)
  • Подскажите (0)



  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0



    Рекомендуемые браузеры: Mozzilla, Google Chrome






    Приветствую Вас, Пробегающий мимо · RSS 16.04.2024, 07:41

    Основы C#. Урок 28. Передача параметров по ссылке и по значению (ref и out)

    Если мы передаем в некоторую функцию параметр, то функция по умолчанию работает с копией параметра, а не с оригиналом. Это называется перередача по значению. При этом при изменении передаваемого параметра внутри функции значение соответствующей переменной вне функции не изменится. Иногда же нам надо, что бы функция действительно изменяла передаваемые в нее параметры. Для этого мы должны передавать их по ссылке. Для этого мы используем ключевое слово ref. Вот пример:

     class Test
     {
     static void SomeFunction1(int a)
     {
     a=12; //Изменяем копию параметра функции
     }
     static void SomeFunction2(ref int a)
     {
     a=55; //Изменяем оригинал параметра функции
     }
     public static void Main()
     {
     int z=23;
     SomeFunction1(z);
     Console.WriteLine(z); //Напечатается 23
     SomeFunction2(ref z);
     Console.WriteLine(z); //Напечатается 55
     }
     }

    Обратите внимание, что при вызове функции SomeFunction2 мы опять используем ключевое слово ref (как и при объявлении этой функции):

     ...
     SomeFunction2(ref z);
     ...

    Параметр out аналогичен параметру ref, только при его использовании в функцию можно передавать неинициализированные переменные (т. е. переменные с незаданными начальными значениями). Вот пример:

     class Test
     {
     static void SomeFunction2(ref int a)
     {
     a=55;
     }
     static void SomeFunction3(out int a)
     {
     a=66;
     }
     public static void Main()
     {
     int z=0; //Переменную z надо обязательно инициализировать
     SomeFunction2(ref z);
     Console.WriteLine(z); //Напечатается 55
     int y; //Переменную y можно не инициализировать
     SomeFunction3(out y);
     Console.WriteLine(y); //Напечатается 66
     }
     }

    При вызове такой функции обязательно использование ключевого слова out.