Конструктори Структур
Конструктор — це метод, який автоматично виконується під час створення нового об'єкта.
Синтаксис конструктора подібний до синтаксису методу, але ви просто опускаєте returnType, оскільки конструктор не повертає жодного значення:
index.cs
1234567891011struct structureName { // ... fields (optional) public structureName(parameter1, parameter2, ...) { // code } // ... methods (optional) }
Важливі моменти щодо синтаксису конструктора:
- Ім'я конструктора збігається з іменем структури;
- Конструктор не має жодного значення, що повертається.
Наступна програма демонструє, як конструктор викликається щоразу при створенні об'єкта:
index.cs
12345678910111213141516171819using System; struct Player { public Player() { Console.WriteLine($"New Player Object Created"); } } class Program { static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
У разі використання версії C# старішої за C# 10
, може виникнути помилка компіляції. Рекомендується використовувати C# 10
або новішу версію. Якщо ви не бажаєте переходити на новішу версію, важливо врахувати, що використання конструкторів буде більш обмеженим. Наприклад, у старіших версіях не можна створити конструктор без параметрів.
Додайте до Player
поле id
, яке буде унікальним ідентифікатором цього об'єкта, щоб кожен об'єкт мав різне значення id
. Значення починатиметься з 0
і буде збільшуватися. Для цього потрібно створити глобальну змінну з назвою totalPlayers
.
index.cs
12345678910111213141516171819202122232425262728using System; class ConsoleApp { // We use the term 'static' when declaring variables directly under class // This will be explained in much more detail in later sections. public static int totalPlayers = 0; // This time we create put the struct inside the `ConsoleApp` class // This is to be able to use the `totalPlayers` variable easily. struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
У наведеному вище коді структура розміщена всередині класу Program
, щоб мати змогу отримати доступ до змінної 'totalPlayers' з конструктора.
Дані можна передати у конструктор під час створення нового об'єкта за допомогою наступного синтаксису:
structureName variableName = new structureName(argument1, argument2, …);
Нижче наведено практичний приклад використання:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate3D { public double x; public double y; public double z; public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public void displayValue() { Console.WriteLine($"{this.x}, {this.y}, {this.z}"); } } class ConsoleApp { static void Main(string[] args) { Coordinate3D coord1 = new Coordinate3D(3, 5, 7); coord1.displayValue(); } }
Розгляньмо код крок за кроком.
Спочатку створено конструктор, у якому передані значення x
, y
, z
присвоюються відповідним полям x
, y
та z
:
index.cs
123456public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; }
У методі Main
створено новий об'єкт Coordinate3D
і через конструктор передано значення 3
, 5
та 7
як x
, y
і z
.
index.cs
1Coordinate3D coord1 = new Coordinate3D(3, 5, 7);
Щоб перевірити, чи були поля успішно ініціалізовані конструктором, використовується метод displayValue
:
index.cs
1coord1.displayValue();
Вивід підтвердив, що поля були успішно оновлені.
Конструктори дуже корисні, коли потрібно ініціалізувати об'єкти з певними даними або виконати початкові операції під час створення об'єкта.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain more about how constructors work in different programming languages?
What happens if I don't define a constructor in my structure or class?
Can you show an example of using multiple constructors with different parameters?
Awesome!
Completion rate improved to 2.04
Конструктори Структур
Свайпніть щоб показати меню
Конструктор — це метод, який автоматично виконується під час створення нового об'єкта.
Синтаксис конструктора подібний до синтаксису методу, але ви просто опускаєте returnType, оскільки конструктор не повертає жодного значення:
index.cs
1234567891011struct structureName { // ... fields (optional) public structureName(parameter1, parameter2, ...) { // code } // ... methods (optional) }
Важливі моменти щодо синтаксису конструктора:
- Ім'я конструктора збігається з іменем структури;
- Конструктор не має жодного значення, що повертається.
Наступна програма демонструє, як конструктор викликається щоразу при створенні об'єкта:
index.cs
12345678910111213141516171819using System; struct Player { public Player() { Console.WriteLine($"New Player Object Created"); } } class Program { static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
У разі використання версії C# старішої за C# 10
, може виникнути помилка компіляції. Рекомендується використовувати C# 10
або новішу версію. Якщо ви не бажаєте переходити на новішу версію, важливо врахувати, що використання конструкторів буде більш обмеженим. Наприклад, у старіших версіях не можна створити конструктор без параметрів.
Додайте до Player
поле id
, яке буде унікальним ідентифікатором цього об'єкта, щоб кожен об'єкт мав різне значення id
. Значення починатиметься з 0
і буде збільшуватися. Для цього потрібно створити глобальну змінну з назвою totalPlayers
.
index.cs
12345678910111213141516171819202122232425262728using System; class ConsoleApp { // We use the term 'static' when declaring variables directly under class // This will be explained in much more detail in later sections. public static int totalPlayers = 0; // This time we create put the struct inside the `ConsoleApp` class // This is to be able to use the `totalPlayers` variable easily. struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
У наведеному вище коді структура розміщена всередині класу Program
, щоб мати змогу отримати доступ до змінної 'totalPlayers' з конструктора.
Дані можна передати у конструктор під час створення нового об'єкта за допомогою наступного синтаксису:
structureName variableName = new structureName(argument1, argument2, …);
Нижче наведено практичний приклад використання:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate3D { public double x; public double y; public double z; public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public void displayValue() { Console.WriteLine($"{this.x}, {this.y}, {this.z}"); } } class ConsoleApp { static void Main(string[] args) { Coordinate3D coord1 = new Coordinate3D(3, 5, 7); coord1.displayValue(); } }
Розгляньмо код крок за кроком.
Спочатку створено конструктор, у якому передані значення x
, y
, z
присвоюються відповідним полям x
, y
та z
:
index.cs
123456public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; }
У методі Main
створено новий об'єкт Coordinate3D
і через конструктор передано значення 3
, 5
та 7
як x
, y
і z
.
index.cs
1Coordinate3D coord1 = new Coordinate3D(3, 5, 7);
Щоб перевірити, чи були поля успішно ініціалізовані конструктором, використовується метод displayValue
:
index.cs
1coord1.displayValue();
Вивід підтвердив, що поля були успішно оновлені.
Конструктори дуже корисні, коли потрібно ініціалізувати об'єкти з певними даними або виконати початкові операції під час створення об'єкта.
Дякуємо за ваш відгук!