Public_static_void_Mov ( int x, int y, int d)
{
x=x+d;
y=y+d;
}
public_static_void_Main()
{
int a=4, b=3, d=10;
Move ( a, b, d); // вызов метода
}
}
В данном случае метод работает с копиями параметров, исходные значения в ячейках не трогает. Проверить можно опять-таки выводом значений на экран после вызова метода.
Возврат объекта из метода
При определении метода указывается тип возвращаемого из метода объекта. Возврат значения выполняется оператором return Объект;
Оператор прекращает выполнение метода и производит возврат в точку вызова. Выражение может определить выражение любого типа, т.е. из метода можно вернуть:
1. Значение стандартного типа (целые, вещественные и т.д.)
2. Массив (т.е. ссылку на его начало)
3. Объект определенного класса
Последние два варианта позволяют добиться возврата из метода множества значений.
Рассмотрим пример.
class_Example
{
public_static_int_Mov ( int x, int y, int d) //возвращение целого числа из метода
{ int k; //локальная переменная метода
x=x+d;
y=y+d;
k=x+y; //сумма переменных, которую возвратим в точку выхода
return k; //оператор возвращает переменную
}
public_static_void_Main()
{
int a=4, b=3, d=10, k;
k=Move ( a, b, d); // вызов метода, возвращаемое значение присваивается k
}
}
В последнем примере изменения, связанные с возвратом значения, выделенные красным цветом. Главное помнить: возвращаемое значение должно быть или присвоено какой-либо переменной, или должно участвовать в вычисляемом выражении, или быть аргументом другого метода. Например:
k= 5/ 2.0 + Move ( a, b, d);
Параметры метода Main()
Main() особый метод, внутри нашей программы его вызвать нельзя. Но у него, если вы обратили внимание, тоже есть параметры. Их можно указывать при запуске программы из командной строки. Внимание! Материал не требует изучения и апробации. Дается справочно для тех, кто интересуется изучением языка на углубленном уровне.
Main |
Метод |
аргументы вызов |
возврат значение |
программа |
запуск |
аргументы |
аргументы |
значение |
В рамках данного вопроса рассмотрим вариант, когда программа запускается из среды исполнения. Поскольку метод Main() выполняется первым при запуске программы, то именно через этот метод производится прием аргументов.
Для запуска программы в среде исполнения формируется команда. Команда должна содержать спецификацию исполнимого файла и возможно аргументы, которые в команде указываются через пробел.
С: |
PR |
PR |
BIN |
DEBUG |
pr.sln (решение) |
pr.exe |
C:\PR\PR\BIN\DEBUG\pr.exe_аргумент1_ аргумент2_... _аргументN
Состав параметров метода Main фиксирован: Main (string[] args)
Метод принимает параметры из команды в виде массива строк. Каждая строка хранит символьное представление одного аргумента.
Пример
Разработать программу, предназначенную для хранения в виде массива цен на товары и их изменения на заданную сумму. Изменение выполняется методами
· Plus – увеличение
· Minus – уменьшение
Исполняемый файл хранится в файле pr.exe.
Соглашение об аргументах в команде
1. Сумма
2. Вид операции
· Плюс (в любом регистре) или +
· Минус (в любом регистре) или –
3. Фамилия оператора (ключ)
Пример команды
C:\PR\PR\BIN\DEBUG\pr.exe_50_Плюс_Иванов
«50» |
«Плюс» |
«Иванов» |
public static void Plus(double[] p, double s)
// массив цен, сумма, на которую увеличиваем
{
for (int i = 0; i < p.Length; i++)
p[i] += s;
}
public static void Minus(double[] p, double s)
{
for (int i = 0; i < p.Length; i++)
p[i] -= s;
}
public static Main(string[] args)
{
double[] pr; //массив с ценами
double delta; //сумма
string key = "Иванов"; //ключ
pr = new double[] { 100.0, 200.0, 300.0 };
//проверяем сколько аргументов нам передали
if (args.Length != 3) return;
//завершение программы - ошибка1
//проверка фамилии
if (args[2] != key) return;
//завершение программы - ошибка2
//пересчет цен
delta = double.Parse(args[0]);
//чтение операции
switch (args[1].ToUpper())
{
case "ПЛЮС":
case "+": Plus(pr, delta); break;
case "МИНУС":
case "-": Minus(pr, delta); break;
}
//вывод новых цен
return;
}
Перегруженные методы
В одном классе может быть определено несколько методов с одним именем, но с разным составом параметров по количеству, типам, способу передачи аргументов. Такие методы называются перегруженными.
Перегруженные методы используются в составе классов для определения однотипных по функциональному назначению операций, реализуемых по-разному.
Выяснение конкретного метода, который будет реально вызван, производится на этапе трансляции по следующей схеме:
1. Вызывающий метод – это тот метод, который совпадает с вызовом по имени, количеству и типу параметров.
2. Если такого метода нет, вызывается метод, который совпадает с вызовом по имени и количеству параметров, при этом аргументы могут быть преобразованы к типу параметров без потери информации
3. Если такого метода нет, фиксируется ошибка.
Пример
Определить класс, описывающий понятие точка, методы, реализующие операции:
- Установка точки на числовой оси
- Установка точки на плоскости
- Установка точки в трехмерном пространстве
- Вычисление расстояния от точки до начала координат
class Program
{
public static void Main()
{
double d; //расстояние
double x, y, h
//установка точки на прямой
public void Set(double xp)
{
x = xp; y = 0; h = 0;
}
//установка точки на плоскости
public void Set(double xp, double yp)
{
x = xp; y = yp; h = 0;
}
//установка точки в пространстве
public void Set(double xp, double yp, double hp)
{
x = xp; y = yp; h = hp;
}
//вычисление расстояния
public double Dist()
{
return Math.Sqrt(x * x + y * y + h * h);
}
}
Set(2.0); //будет вызван первый Set()
d=Dist(); // d=2.0
Set(3.0,4.0); //будет вызван второй Set()
d=Dist(); // d=5.0
Set(2,3,6); //будет вызван третий Set
d=Dist(); // d=7.0
}
}
Перегруженные методы не различаются по типу возвращаемого значения. В данном примере при вызове метода будет вызван тот экземпляр метода, который соответствует вызову по числу параметров. Перегруженные методы могут различаться и типом аргументов. Вспомните стандартный метод класса Math, вычисляющий модуль числа: есть перегруженные методы для каждого типа числовой переменной.
Конструкторы
Представляют собой специфический метод класса. Специфика заключается:
в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется, как правило, для инициализации полей объекта.
в оформлении (т.е. в синтаксисе) – конструктор должен иметь имя, совпадающее с именем класса, конструктор не имеет возвращаемого значения.
Конструкторы могут быть перегружены, вызов соответствующего конструктора выполняется при создании объекта
Методические рекомендации
При работе с методами важно помнить следующие моменты:
1. Метод, который не возвращает значение, в заголовке должен вместо типа возвращаемого значения иметь void. Вызов метода не включается в состав выражения присваивания, не является аргументом другого метода.
2. Метод, который возвращает значение, в заголовке должен иметь тип возвращаемого значения. Вызов метода включается в состав выражения присваивания, является аргументом другого метода и проч..
3. При обращении к методу следует точно указать его имя, соблюдать число, тип и порядок следования параметров.
4. Для овладения методами на школьном уровне достаточно уметь передавать параметры по значению, а также использовать массивы.
5. В порядке осваивания технологии разработки методов выполните все задачи по массивам и циклам из предыдущих уроков с использованием методов.