Коректний Доступ до Полів у Методах Структур
Свайпніть щоб показати меню
До цього моменту ви створювали методи, передавали в них дані та використовували їх без проблем, але розгляньте приклад, коли ім'я параметра методу збігається з ім'ям поля всередині структури:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { x = x; y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }
Компилятор не показує жодної помилки у цьому випадку, однак програма є логічно некоректною, оскільки результат виконання програми показує (0, 0), навіть якщо ви викликали setValue(5, 7).
Це відбувається тому, що вираз x = x є дуже неоднозначним, оскільки і параметр методу, і поле структури мають ім'я x. З точки зору компілятора, у виразі x = x параметр методу x присвоює значення x самому собі ще раз, що логічно є нульовою операцією і нічого не змінює.
Щоб виправити це, використовуйте ключове слово this. Ключове слово this вказує компілятору, що ви звертаєтесь саме до поля структури.
Синтаксис такий: this.fieldName. Виправлений код виглядатиме так:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { this.x = x; this.y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }
Тепер компілятор знає, що у виразі x = x ліва частина x — це поле структури, а права частина x — параметр методу, тому цього разу поле успішно оновлюється.
Ключове слово this використовується для вирішення будь-якої неоднозначності у коді. Загалом, рекомендується завжди використовувати ключове слово this при доступі до полів у методах структур.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат