Отправляет email-рассылки с помощью сервиса Sendsay

Финансы. Инструкция

  Все выпуски  

Уроки по C# и .NET.


Информационный Канал Subscribe.Ru

C# и .NET. Уроки с сайта http://progs.biz

Рассылка №14

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

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

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

Наверх

Основы C#. Урок 29. Пример передачи по ссылке

На этом уроке мы напишем функцию для решения квадратного уравнения. Эта функция будет передавать корни уравнения через ссылку - т. е. через свои два параметра. Всего же параметров будет пять - остальные три - это коэффициетны a, b, и c. Тип у функции будет int - она будет возвращать фактическое число корней (т. е. 0, 1 или 2).

Вот текст:

using System;
namespace test
{
    class Test
    {
        static int GetSolution(out double x1, out double x2, double a, double b, double c)
        {
            double d=b*b-4*a*c; //Дискриминант
            x1=x2=0;
            //Два разных корня
            if(d>0)
            {
                x1=(-b+Math.Sqrt(d))/(2*a);
                x2=(-b-Math.Sqrt(d))/(2*a);
                return 2;
            }
            //Два совпадающих корня
            if(d==0)
            {
                x1=-b/(2*a);
                x2=-b/(2*a);
                return 1;
            }
            //Корней нет
            return 0;
        }
        public static void Main()
        {
            double x1, x2;
            int n = GetSolution(out x1, out x2, 1, -5, 6);
            switch(n)
            {
                case 1:
                    Console.WriteLine("Два совпадающих корня x1={0}, x2={1}", x1, x2);
                    break;
                case 2:
                    Console.WriteLine("Два разных корня x1={0}, x2={1}", x1, x2);
                    break;
                case 0:
                    Console.WriteLine("Корней нет");
                    break;
            }
        }
    }
}

Запускаем программу. Программа должна выдать на экран "Два разных корня x1=3, x2=2".

Наверх

Рассылки с сайта progs.biz

Рассылки Subscribe.Ru
Delphi. Уроки

Delphi. Уроки. Уровень - от начинающего до профи. Каждый урок рассчитан на 15 - 20 минут. Темы - библиотека VCL, создание компонентов, создание ActiveX, COM, COM+, DCOM, FAQ, работа с базами данных (InterBase и др).


Copyright Алексеев Игорь, 2002

Copyright сайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное