Передача параметрів у метод. Аргументи і формальні параметри. Приклади передачі параметрів у методи. Передача посилання на об’єкт класу в метод
Зміст
- 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. Переваги. Приклади методів зі змінною кількістю аргументів
- Передача масивів у методи. Приклади. Передача масивів структур, класів, зчислень у методи. Передача двовимірних масивів у методи. Повернення масиву з методу
- Необов’язкові аргументи. Переваги. Приклади застосування необов’язкових аргументів. Неоднозначність в необов’язкових аргументах
- Іменовані аргументи. Переваги використання. Приклади