Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Передача параметров по ссылке




Если из метода надо вернуть несколько значений, используется передача параметров по ссылке.

Фактические параметры при передаче по ссылке перед обращением к методу обязательно должны иметь какие-либо начальные значения. После выхода из метода параметры могут иметь изменённые значение.

Для того, чтобы указать, что передача данных ведётся по ссылке, необходимо и при вызове метода, и в его определении параметры, передаваемые по ссылке, записывать со словом ref.

По ссылке можно передавать только переменные, но не константы и не выражения.

Этот метод хорош в том случае, когда параметры для решаемой задачи являются одновременно и входными, и выходными данными.

Рассмотрим снова задачу 3-го примера, только данные передадим по ссылке.

Разница с предыдущим примером в двух строках:

Obmen(ref a, ref b); // При вызове метода

Public static void Obmen(ref int a, ref int b) // заголовок метода

Пример 3а. Написать метод, который позволял бы произвести обмен значений двух переменных.

Реализация:

class Program

{

   public static void Main(string[] args)

   {

   int a = 3, b = 4;

   Console.WriteLine("До входа в метод:\n a={0} b={1}", a, b);

   Obmen(ref a, ref b);

   Console.WriteLine("После выхода из мет-а:\n a={0} b={1}", a, b);

   Console.Write("Press any key to continue . . . ");

   Console.ReadKey(true);

   }

   public static void Obmen(ref int a, ref int b)

   {

   Console.WriteLine("В методе до обмена:\n a={0} b={1}", a, b);

   int c;

   c = a;

   a = b;

   b = c;

   Console.WriteLine("В методе после обмена:\n a={0} b={1}", a, b);

   }

}

Результаты работы:

Теперь обмен данных, произведённый в методе, отразился на переменных, передаваемых по ссылке. После выхода из метода они имеют новые (изменённые) значения.

Выходные данные

Что чаще всего результирующие параметры просто вычисляются в методе, а не являются одновременно и входными, и выходными данными. Для данных, которые являются только выходными, использование передачи по ссылке неудобно, так как требует инициализации данных, которые мы только собираемся вычислять. В таких случаях выгоднее использовать так называемые «выходные данные». Для них вместо слова ref используют слово out. Эти данные реально так же передаются по ссылке, но для них не делается проверка на инициализацию до передачи в метод.

Пример4. Даны три числа. Вычислить их средние величины:

· среднее арифметическое

· среднее геометрическое

· среднее квадратическое

Реализация:

class Program

{

   public static void Main(string[] args)

   {

      double a, b, c, ar, geo, kv;

       Console.Write("a=");

       a = double.Parse(Console.ReadLine());

       Console.Write("b=");

       b = double.Parse(Console.ReadLine());

       Console.Write("c=");

       c = double.Parse(Console.ReadLine());

       Srednee(a, b, c, out ar, out geo, out kv);

       Console.WriteLine("Среднее арифметическое = {0}", ar);

       Console.WriteLine("Среднее геометрическое = {0}", geo);

       Console.WriteLine("Среднее квадратическое = {0}", kv);

       Console.Write("Press any key to continue . . . ");

       Console.ReadKey(true);

   }

   public static void Srednee(double a, double b, double c,

      out double ar, out double geo, out double kv)

   {

       ar = (a + b + c) / 3;

       geo = Math.Pow(a * b * c, 1.0 / 3);

       kv = Math.Sqrt(a * a + b * b + c * c);

   }

}










Последнее изменение этой страницы: 2018-05-10; просмотров: 206.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...