Тож, як я розумію, це { get; set; }
"авто властивість", як і @Klaus та @Brandon, це стенограма для написання властивості з "полем резервного копіювання". Отже, у цьому випадку:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
Однак якщо ти схожий на мене - приблизно годину або близько тому - ти насправді не розумієш, що таке властивості та аксесуари , і ти не маєш найкращого розуміння деяких базових термінологій. MSDN - це чудовий інструмент для вивчення таких предметів, але це не завжди легко зрозуміти для початківців. Тому я спробую тут пояснити це більш поглиблено.
get
і set
є аксесуарами , тобто вони можуть отримати доступ до даних та інформації в приватних полях (як правило, із резервного поля ), і зазвичай це роблять із загальнодоступних властивостей (як ви бачите в наведеному вище прикладі).
Не можна заперечувати, що наведене твердження є досить заплутаним, тому давайте перейдемо до деяких прикладів. Скажімо, цей код стосується жанрів музики. Тож у класі Жанр ми хочемо отримати різні жанри музики. Скажімо, ми хочемо мати 3 жанри: хіп-хоп, рок та кантрі. Для цього ми б використали ім’я Класу для створення нових примірників цього класу.
Genre g1 = new Genre(); //Here we're creating a new instance of the class "Genre"
//called g1. We'll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();
//Note the () following new Genre. I believe that's essential since we're creating a
//new instance of a class (Like I said, I'm a beginner so I can't tell you exactly why
//it's there but I do know it's essential)
Тепер, коли ми створили екземпляри класу жанру, ми можемо встановити імена жанрів за допомогою властивості 'Name', яке було встановлено вище.
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
Ми можемо встановити ім'я 'g1' на Hip Hop, написавши наступне
g1.Name = "Hip Hop";
Те, що відбувається тут, начебто складне. Як я вже говорив раніше, get
і set
отримуйте доступ до інформації з приватних полів, до яких ви інакше не зможете отримати доступ. get
може лише читати інформацію з цього приватного поля та повертати її. set
може записувати інформацію лише в цьому приватному полі. Але маючи властивість з обома get
і set
ми можемо виконувати обидві ці функції. І, пишучи, g1.Name = "Hip Hop";
ми спеціально використовуємо set
функцію з власності Name
set
використовує неявну змінну, що називається value
. В основному, що це означає, що коли ви бачите "значення" всередині set
, воно посилається на змінну; змінна "значення". Коли ми пишемо, g1.Name =
ми використовуємо =
передати value
змінну, яка в даному випадку є "Hip Hop"
. Таким чином, ви можете подумати про це так:
public class g1 //We've created an instance of the Genre Class called "g1"
{
private string name;
public string Name
{
get => name;
set => name = "Hip Hop"; //instead of 'value', "Hip Hop" is written because
//'value' in 'g1' was set to "Hip Hop" by previously
//writing 'g1.Name = "Hip Hop"'
}
}
Важливо зазначити, що наведений вище приклад насправді не записаний у коді. Це більше гіпотетичний код, який представляє те, що відбувається на задньому плані.
Отже, тепер, коли ми встановили ім'я g1 екземпляр жанру , я вважаю, що ми можемо отримати ім'я, написавши
console.WriteLine (g1.Name); //This uses the 'get' function from our 'Name' Property
//and returns the field 'name' which we just set to
//"Hip Hop"
і якби ми запустили це, ми потрапили б "Hip Hop"
у свою консоль.
Тож для цього пояснення я докладу і приклад із результатами
using System;
public class Genre
{
public string Name { get; set; }
}
public class MainClass
{
public static void Main()
{
Genre g1 = new Genre();
Genre g2 = new Genre();
Genre g3 = new Genre();
g1.Name = "Hip Hop";
g2.Name = "Rock";
g3.Name = "Country";
Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
}
}
Вихід:
"Genres: Hip Hop, Rock, Country"