Передача параметров в метод. Аргументы и формальные параметры. Примеры передачи параметров в методы. Передача ссылки на объект класса в метод
Содержание
- 1. Что такое аргументы и формальные параметры метода? Пример
- 2. Какие существуют способы передачи аргумента методу?
- 3. Какой способ передачи аргумента методу используется в C# по умолчанию?
- 4. Пример, который демонстрирует передачу по значению аргументов базовых типов
- 5. Как осуществляется передача в метод ссылки на объект класса. Пример
- 6. Можно ли изменить внутренние данные объекта класса в методе, которому передается ссылка на этот объект?
- Связанные темы
Поиск на других ресурсах:
1. Что такое аргументы и формальные параметры метода? Пример
Аргументы – это значения, которые передаются в метод при его вызове. Формальные параметры – это значения, которые получают значение аргументов в методе. Формальные параметры используются в методе для выполнения вычислений, операций или действий в методе.
При вызове метода значение аргументов копируются (передаются) в формальные параметры метода. Существует несколько способов передачи аргументов методу.
Пример. Демонстрируется передача аргумента целого типа в метод. Задан метод Sqr(), который получает целое число и возвращает квадрат этого числа
public int Sqr(int x) // x - формальный параметр { return x * x; }
При вызове метода из другого кода, аргумент копируется в формальный параметр.
int a, b; a = 5; // вызов метода Sqr() b = Sqr(a); // a - аргумент, b = 25 b = Sqr(15); // 15 - аргумент, b = 225
В вышеприведенном коде вызов метода Sqr() происходит два раза.
Первый раз значение аргумента a = 5 копируется в формальный параметр x. Производится вычисление в методе Sqr() и результат (25) возвращается из метода операцией return.
При втором вызове, точно так же, значение числа 15, которое есть аргументом, копируется в формальный параметр x. Затем происходит вычисление и результат (225) возвращается оператором return.
⇑
2. Какие существуют способы передачи аргумента методу?
В языке C# существует два основных способа передачи аргумента методу:
- передача по значению (passing by value). В этом случае значение аргумента копируется в формальный параметр метода, как описано в предыдущем пункте. При этом способе передачи, все изменения над формальным параметром, которые происходят в методе, не влияют на аргумент который использовался при вызове;
- передача по ссылке (passing by reference). В этом случае методу передается ссылка на аргумент. Таким образом, если изменить формальный параметр метода, то изменится и аргумент, который был использован при вызове метода.
⇑
3. Какой способ передачи аргумента методу используется в C# по умолчанию?
По умолчанию используется передача аргумента по значению. То есть, значение аргумента копируется в формальный параметр метода и там используется. Изменение параметра в теле метода не приводит к изменению аргумента, который передавался у метод.
⇑
4. Пример, который демонстрирует передачу по значению аргументов базовых типов
В примере демонстрируется передача аргументов таких базовых типов как int, double, char
// класс, который демонстрирует передачу по значению class PassingValue { // передача по значению типа int public void IntValue(int t) // t - формальный параметр { t = 100; // это изменение на аргумент не влияет return; } // передача по значению типа char public void CharValue(char c) { c = 'F'; // изменение c не влияет на аргумент } // передача по значению типа double public void DoubleValue(double d) { d = 12.333; // изменение d в методе не влияет на аргумент } } class Program { static void Main(string[] args) { PassingValue pv = new PassingValue(); // вызов методов, в которых изменяются значения аргументов int x = 15; pv.IntValue(x); // x = 15 после выхода из метода, то есть не изменяется Console.WriteLine("x = {0}", x); pv.CharValue('M'); // делается копия со значения 'M' double z = 3.88; pv.DoubleValue(z); // после выхода из метода z = 3.88, то есть не изменяется Console.WriteLine("z = {0}", z); Console.ReadLine(); return; } }
В примере, в методах IntValue(), CharValue(), DoubleValue() изменяются значения формальных параметров внутри методов. Такое изменение не влияет на аргументы, которые передавались в эти методы.
⇑
5. Как осуществляется передача в метод ссылки на объект класса. Пример
Непосредственно объект класса в метод не передается. Однако в метод передается ссылка на объект. Как и в случае с базовыми типами, при передаче ссылки на объект в метод, происходит копирование этой ссылки в формальный параметр метода. Значит, формальный параметр в методе содержит точно такое же значение как и аргумент, который передавался методу.
Пример. Передается объект класса Triangle в метод. Класс Triangle реализует треугольник, который задан координатами точек. В методе Perimeter класса Triangle реализуется вычисление периметра треугольника.
// класс, который описывает треугольник class Triangle { public double x1, y1, x2, y2, x3, y3; // конструктор класса public Triangle(double _x1, double _y1, double _x2, double _y2, double _x3, double _y3) { x1 = _x1; y1 = _y1; x2 = _x2; y2 = _y2; x3 = _x3; y3 = _y3; } // метод, который получает входным параметром ссылку на объект класса Triangle, // метод вычисляет периметер public double Perimeter(Triangle T) { double a, b, c; a = Math.Sqrt(Math.Pow(T.x1 - T.x2, 2) + Math.Pow(T.y1 - T.y2, 2)); b = Math.Sqrt(Math.Pow(T.x1 - T.x3, 2) + Math.Pow(T.y1 - T.y3, 2)); c = Math.Sqrt(Math.Pow(T.x2 - T.x3, 2) + Math.Pow(T.y2 - T.y3, 2)); return a + b + c; } }
Как видно из вышеприведенного кода, метод Perimeter() получает входным параметром ссылку T на объект класса Triangle. Сама ссылка передается по значению. С помощью ссылки T можно доступиться к методам и данным (полям) класса Triangle.
Использование класса Triangle и вызов метода Perimeter() из другого программного кода может быть следующим:
... // создание объекта класса Triangle tr = new Triangle(1, 3, 4, 5, 0, 7); double p; // объект (экземпляр) класса tr передается в метод Perimeter p = tr.Perimeter(tr); // p = 12.20079 ...
В вышеприведенном коде объявляется ссылка с именем tr на объект класса Triangle. Затем эта ссылка передается в метод Perimeter() для вычисления периметра.
⇑
6. Можно ли изменить внутренние данные объекта класса в методе, которому передается ссылка на этот объект?
Да можно. Если методу передается ссылка на объект, то эта ссылка (аргумент) копируется в формальный параметр. Ведь и аргумент и формальный параметр указывают на один и тот же объект. Поэтому с помощью формального параметра метода (ссылки) можно изменять данные объекта который передавался в метод.
Например. Объявляется класс DemoInt, в котором есть:
- внутренняя переменная t;
- метод Change100(), который получает ссылку на класс DemoInt. В методе Change100() значение внутренней переменной t входного формального параметра изменяется на 100.
С целью демонстрации, в функции Main() класса Program выполняются следующие действия:
- создается объект di класса DemoInt;
- значение внутренней переменной t объекта di становится равным 25;
- вызывается метод Change100(), в котором di.t становится равным 100;
- происходит проверка с помощью переменной res. Переменная res = 100 а не 25. Это означает, что при передаче объекта класса по ссылке в метод, данные этого объекта можно изменить в этом методе.
// объявление класса, который содержит 1 внутренний член данных class DemoInt { public int t; // внутренняя переменная // метод получает ссылку на объект класса DemoInt public void Change100(DemoInt di) { di.t = 100; // изменить член данных объекта di } } class Program { static void Main(string[] args) { // создание объекта класса DemoInt d = new DemoInt(); // изменение значения в объекте класса d.t = 25; // передача ссылки в объект класса d.Change100(d); // в методе изменяется значение d.t int res = d.t; // res = 100, произошло изменение: d.t = 100 return; } }
⇑
Связанные темы
- Понятие метода. Примеры методов в классах. Возврат из метода. Оператор return. Методы без параметров. Ключевое слово void
- Модификаторы параметров ref и out. Примеры. Отличия между модификаторами ref и out
- Переменное количество аргументов в методах. Модификатор params. Преимущества. Примеры методов с переменным количеством аргументов
- Передача массивов в методы. Примеры. Передача массивов структур, классов, перечислений. Передача двумерных массивов в методы. Возврат массива из метода
- Необязательные аргументы. Преимущества. Примеры применения необязательных аргументов. «Неоднозначность» в необязательных аргументах
- Именованные аргументы. Преимущества. Примеры