Коректний Доступ до Полів у Методах Структур
До цього моменту ви створювали методи, передавали в них дані та використовували їх без проблем, але розгляньте приклад, коли ім'я параметра методу збігається з ім'ям поля всередині структури:
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
при доступі до полів у методах структур.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.04
Коректний Доступ до Полів у Методах Структур
Свайпніть щоб показати меню
До цього моменту ви створювали методи, передавали в них дані та використовували їх без проблем, але розгляньте приклад, коли ім'я параметра методу збігається з ім'ям поля всередині структури:
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
при доступі до полів у методах структур.
Дякуємо за ваш відгук!