Об'єкти Класу проти Об'єктів Структури
Об'єкти класу також можуть зберігатися в масивах, словниках і списках так само, як і структури, однак важливо зазначити, що об'єкти класу передаються за посиланням, тоді як об'єкти структури передаються за значенням.
Ця концепція є важливою, оскільки передача простих значень, таких як int
, float
або double
, у методи відрізняється від передачі складних об'єктів і структур у методи. Розглянемо приклад, щоб краще зрозуміти цю концепцію.
Ви створите простий об'єкт структури і передасте його в метод. Ви зміните його значення всередині методу і побачите, що станеться зі значенням оригінального об'єкта:
index.cs
123456789101112131415161718192021222324252627using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }
Результат показує, що значення passedObject
було оновлено, тоді як значення originalObject
залишилося незмінним. Це демонструє, що коли ви передаєте об'єкт структури в метод, створюється копія цього об'єкта і передається в метод, іншими словами, він передається за значенням.
Тепер використаємо той самий код, лише замінивши термін struct
на class
:
index.cs
123456789101112131415161718192021222324252627using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }
Ви помітите, що результат змінився — як passedObject
, так і originalObject
тепер мають однакове значення. Це доводить, що при передачі об'єкта класу в метод передається посилання на оригінальний об'єкт, тому зміни в passedObject
змінюють і originalObject
.
Ця властивість також застосовується при присвоєнні об'єктів змінним. Нижче наведено приклад, який демонструє поведінку структурного об'єкта:
index.cs
12345678910111213141516171819202122232425using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }
Той самий код, але цього разу для об'єкта класу:
index.cs
12345678910111213141516171819202122232425using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }
1. Об'єкти класу:
2. Наведений нижче код демонструє використання об'єктів класу зі списками та словниками. Код пояснюється у коментарях. Ознайомтеся з кодом і виберіть варіант, який відображає правильний результат виконання. Код може бути довгим, але це гарна вправа для читання коду.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.04
Об'єкти Класу проти Об'єктів Структури
Свайпніть щоб показати меню
Об'єкти класу також можуть зберігатися в масивах, словниках і списках так само, як і структури, однак важливо зазначити, що об'єкти класу передаються за посиланням, тоді як об'єкти структури передаються за значенням.
Ця концепція є важливою, оскільки передача простих значень, таких як int
, float
або double
, у методи відрізняється від передачі складних об'єктів і структур у методи. Розглянемо приклад, щоб краще зрозуміти цю концепцію.
Ви створите простий об'єкт структури і передасте його в метод. Ви зміните його значення всередині методу і побачите, що станеться зі значенням оригінального об'єкта:
index.cs
123456789101112131415161718192021222324252627using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }
Результат показує, що значення passedObject
було оновлено, тоді як значення originalObject
залишилося незмінним. Це демонструє, що коли ви передаєте об'єкт структури в метод, створюється копія цього об'єкта і передається в метод, іншими словами, він передається за значенням.
Тепер використаємо той самий код, лише замінивши термін struct
на class
:
index.cs
123456789101112131415161718192021222324252627using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }
Ви помітите, що результат змінився — як passedObject
, так і originalObject
тепер мають однакове значення. Це доводить, що при передачі об'єкта класу в метод передається посилання на оригінальний об'єкт, тому зміни в passedObject
змінюють і originalObject
.
Ця властивість також застосовується при присвоєнні об'єктів змінним. Нижче наведено приклад, який демонструє поведінку структурного об'єкта:
index.cs
12345678910111213141516171819202122232425using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }
Той самий код, але цього разу для об'єкта класу:
index.cs
12345678910111213141516171819202122232425using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }
1. Об'єкти класу:
2. Наведений нижче код демонструє використання об'єктів класу зі списками та словниками. Код пояснюється у коментарях. Ознайомтеся з кодом і виберіть варіант, який відображає правильний результат виконання. Код може бути довгим, але це гарна вправа для читання коду.
Дякуємо за ваш відгук!