progs.biz  
Начало > C# > Основы > Урок 28
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Разработка WEB-сервисов XML и серверных компонентов на Visual Basic.NET и Visual C#.NET. Учебный курс MCAD/MCSD.
 Разработка WEB-сервисов XML и серверных компонентов на Visual Basic.NET и Visual C#.NET. Учебный курс MCAD/MCSD.
Заказать на Озоне



Яндекс-цитирования

Основы 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.

Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz

 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2005 сайт progs.biz
© 2002-2005 Алексеев Игорь