ВНИМАНИЕ! Конкурс по программированию!

Проект Programmers.kz и школа hotPen3D2D предлагает Вам курсы по веб-дизайну, веб-программированию и компьютерной графике. Подробности здесь.

 
Информация к новости
 (голосов: 0)

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

Категория: Программирование » C# » Уроки C#

Если мы передаем в некоторую функцию параметр, то функция по умолчанию работает с копией параметра, а не с оригиналом. Это называется перередача по значению. При этом при изменении передаваемого параметра внутри функции значение соответствующей переменной вне функции не изменится. Иногда же нам надо, что бы функция действительно изменяла передаваемые в нее параметры. Для этого мы должны передавать их по ссылке. Для этого мы используем ключевое слово 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 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.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Введите два слова, показанных на изображении: *