Модуль 4: Методы и параметры
Обзор n Методы n Параметры n Перегрузка методов
u Методы n Определение методов n Вызов методов n Инструкция return n Использование локальных переменных n Возврат значений
Определение метода n Main – это метод l Для создания собственных методов используйте тот же синтаксис using System; class Example. Class { static void Example. Method( ) { Console. Write. Line("Example method"); } static void Main( ) { //. . . } }
Вызов методов n После создания метода, вы можете : l Вызвать метод из класса, в котором он был создан Напишите имя метода и список параметров в круглых скобках l Вызвать метод, определенный в другом классе Необходимо указать компилятору, какому классу принадлежит вызываемый метод Вызываемый метод должен быть объявлен с использованием ключевого слова public l Использовать вложенные вызовы Методы могут вызывать методы, которые вызывают другие методы, и т. д.
Инструкция return n Немедленное завершение n Выход по условию static void Example. Method( ) { int num. Beans; //. . . Console. Write. Line("Hello"); if (num. Beans < 10) return; Console. Write. Line("World"); }
Использование локальных переменных n Локальные переменные l l Используются только внутри метода l n Создаются при вызове метода Уничтожаются при выходе из метода Совместно используемые переменные l n Переменные уровня класса для совместного использования Конфликты области действия переменных l Компилятор не предупреждает о совпадении имен локальных переменных и переменных уровня класса
Возврат значений n Заменить тип void типом возвращаемого значения n Добавить операторreturn l l n Устанавливает значение, возвращаемое методом Возвращается в точку вызова метода Non-void методы должны возвращать значения static int Two. Plus. Two( ) { int a, b; a = 2; b = 2; return a + b; } int x; x = Two. Plus. Two( ); Console. Write. Line(x);
u. Параметры n Объявление и вызов методов с параметрами n Механизмы передачи параметров n Передача по значению n Передача параметров по ссылке n Возвращаемые параметры n Список параметров переменной длины n Рекурсивные методы
Объявление и вызов методов с параметрами n Объявление параметров l l n В круглых скобках после имени метода Определяйте тип данных и имя для каждого из параметров Вызов методов с параметрами l Передавайте значения для каждого из параметров static void Method. With. Parameters(int n, string y) {. . . } Method. With. Parameters(2, "Hello, world");
Механизмы передачи параметров n Три способа передачи параметров in По значению in out По ссылке out Возвращаемые параметры
Передача по значению n Механизм, используемый по умолчанию : l Значение аргумента копируется в формальный параметр метода l Значение параметра может меняться внутри метода l Это не влияет на значение аргумента, используемого при вызове Типы параметра и аргумента должны быть одинаковыми или совместимыми static void Add. One(int x) { x++; // Increment x } static void Main( ) { int k = 6; Add. One(k); l } Console. Write. Line(k); // Display the value 6, not 7
Передача по ссылке n Что такое параметры, передаваемые по ссылке? l n Ссылка на область памяти Использование параметров, передаваемых по ссылке l При объявлении и вызове метода используйте ключевое слово ref l Типы параметра и аргумента должны совпадать l Изменения параметра отразятся на аргументе, используемый при вызове метода l При попытке передать ссылку на неинициализированный параметр, компилятор выдаст ошибку
Возвращаемые параметры n Что такое возвращаемые параметры? l n Для получения значения из метода Использование возвращаемых параметров l Похожи на ref, но не передают значения в метод l При объявлении и вызове метода используйте ключевое слово out l static void Out. Demo(out int p) { //. . . } int n; Out. Demo(out n);
Список параметров переменной длины n Используйте ключевое слово params n Объявляется в виде массива в конце списка параметров n Можно передавать только по значению static long Add. List(params long[ ] v) { long total, i; for (i = 0, total = 0; i < v. Length; i++) total += v[i]; return total; } static void Main( ) { long x = Add. List(63, 21, 84); }
Рекурсивные методы n Метод может вызывать себя l Напрямую l Косвенно
u Перегрузка методов n Объявление перегруженного метода n Сигнатура метода n Использование перегруженных методов
Объявление перегруженного метода n В одном классе можно использовать несколько методов с одним именем l Списки параметров должны отличаться по типу и/или количеству class Overloading. Example { static int Add(int a, int b) { return a + b; } static int Add(int a, int b, int c) { return a + b + c; } static void Main( ) { Console. Write. Line(Add(1, 2) + Add(1, 2, 3)); } }
Сигнатура метода n Сигнатуры методов должны быть уникальны в пределах класса n Определение сигнатуры Определяет сигнатуру Не влияет на сигнатуру n Имя метода n Имя параметра n Тип параметра n n Модификатор параметра Тип возвращаемого методом значения
Использование перегруженных методов n Используйте перегруженные методы, если: l l n У вас имеются похожие методы, различающиеся типом и количеством параметров Вы хотите добавить новую функциональную возможность в уже существующий код Не переусердствуйте, т. к. : l Сложно отлаживать l Сложно поддерживать
Лабораторная работа 4: Создание и использование методов