Студопедия

КАТЕГОРИИ:

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

Передача данных по значению




Методы (процедуры и функции)

Функция – это подпрограмма, которая возвращают одно значение.

Процедура – это подпрограмма, которая не возвращают ни одного значения либо возвращают несколько значений.

Функции и процедуры в Си-шарп называют методами.

Описание метода состоит из заголовка и тела этого метода.

метод_доступа тип_результата имя_метода(список_формальных_параметров)

{

/* Тело метода. Состоит из описания локальных объектов и исполняемых операторов, с помощью которых реализуется алгоритм метода */

}

метод_доступа — это одно из ключевых слов (public, protected, private), определяющих доступность метода. Если это слово отсутствует при определении метода, то метод считается закрытым (private). Подробнее о модификаторах доступа поговорим позже.

тип_результата — любой ранее известный тип данных (стандартный или пользовательский).

Между методом доступа и типом может стоять ключевое слово static, что означает, что функция будет статичной. Из статичной функции можно вызывать другие функции, если они тоже статичные. Главная функция main – всегда static, поэтому все методы будем объявлять также статичными.

Метод может возвращать значение или не возвращать. Если метод, например, возвращает целое число, то нужно указать тип int. Если метод не возвращает никакого значения, то для этого используется ключевое слово void. Методы, которые не возвращают значение, называют процедурами.

имя_метода — задаётся по общим правилам для записи идентификаторов.

список_формальных_параметров — это перечень записанных через запятую параметров, которые ожидаются в методе. Каждый из параметров записывается в виде:

тип_параметраимя_параметра

Перед типом могут задаваться дополнительные слова, уточняющие способ передачи данных в метод (это ref или out).

Вызов метода в простейшем случае можно записать таким образом:

имя_метода(список_фактических_параметров);

список_фактических_параметров — это те данные, которые передаются в метод при его вызове. Записываются через запятую без указания типа, но, возможно, со словами, уточняющими способ передачи данных.

Между списками фактических и формальных параметров должно быть полное соответствие по количеству и типу параметров, порядку их следования и способу передачи в метод.

Пример 1. Найти площадь прямоугольного треугольника, если заданы длины катетов этого треугольника.

Реализация:

class Program

{

   public static void Main(string[] args)

   {

       double a = 3, b = 4;

       double s = Pl(a, b); // вызов метода

       Console.WriteLine("s=" + s);

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

       Console.ReadKey(true);

   }

   // Реализация метода

   public static double Pl(double a, double b)

   {

       double s;

       s = a * b / 2;

       return s;

     }

}

В этом примере в метод Pl() передаются два параметра типа double. Результат работы возвращается через имя метода и в вызывающем методе присваивается нужной переменной.

Метод Pl() вызывается в том же классе Program, в котором и был определён. Поэтому для вызова метода достаточно было упомянуть его имя со списком фактических параметров.

Способы передачи данных в метод

В C# в зависимости от ситуации можно передавать в метод параметры различными способами.

Передача данных по значению

Это основной способ передачи данных в метод, он действует по-умолчанию. При этом способе фактический параметр копируется в метод, и затем в этом методе работа ведётся с копией исходного фактического параметра. Поэтому параметр в методе может как угодно изменяться, но это не отразится на значении фактического параметра после завершения работы с методом. Перед вызовом метода фактический параметр, передаваемый по значению, должен иметь какое-либо значение, т.е. быть проинициализирован.

В качестве параметра, передаваемого по значению, можно использовать константу, переменную или более сложное выражение соответствующего типа.

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

Для демонстрации передачи данных по значению приведём несложный пример.

Пример 2. Даны три действительных числа a, b и c. Определить: может ли существовать треугольник с такими длинами сторон.

Возможная реализация программы:

class Program

{

   public static void Main(string[] args)

   {

       double a = 3, b = 4, c = 5;

       Console.WriteLine("Длины сторон:\n a={0} b={1} c={2}", a, b, c);

       if (Treug(a, b, c))

           Console.WriteLine("Да, треугольник существует");

       else

           Console.WriteLine("Нет, треугольник не существует");

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

       Console.ReadKey(true);

   }

   public static bool Treug(double a, double b, double c)

   {

       if (a + b > c && a + c > b && b + c > a)

           return true;

       else

           return false;

   }

}

В данном примере передаваемые по значению данные не изменялись в методе Treug(). Рассмотрим пример, когда данные меняются в методе.

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

Реализация:

class Program

{

   public static void Main(string[] args)

   {

       int a = 3, b = 4;

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

       Obmen(a, b);

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

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

       Console.ReadKey(true);

   }

   public static void Obmen(int a, 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);

   }

}

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

Параметры, передаваемые по значению, в методе изменялись, но на исходных данных это ни как не отразилось.










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

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