Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Коректний Доступ до Полів у Методах Структур | Структури Та Перелічення
C# Понад Базовий Рівень

bookКоректний Доступ до Полів у Методах Структур

До цього моменту ви створювали методи, передавали в них дані та використовували їх без проблем, але розгляньте приклад, коли ім'я параметра методу збігається з ім'ям поля всередині структури:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829
using 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

index.cs

copy
1234567891011121314151617181920212223242526272829
using 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 при доступі до полів у методах структур.

question mark

Яке ключове слово використовується для усунення неоднозначності при зверненні до полів у методах класу?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 2.04

bookКоректний Доступ до Полів у Методах Структур

Свайпніть щоб показати меню

До цього моменту ви створювали методи, передавали в них дані та використовували їх без проблем, але розгляньте приклад, коли ім'я параметра методу збігається з ім'ям поля всередині структури:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829
using 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

index.cs

copy
1234567891011121314151617181920212223242526272829
using 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 при доступі до полів у методах структур.

question mark

Яке ключове слово використовується для усунення неоднозначності при зверненні до полів у методах класу?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 6
some-alt