Итак, насколько я понимаю, { 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
являются аксессорами , что означает, что они могут получить доступданные и информация в частных полях (обычно из вспомогательного поля ) и, как правило, из public properties (как вы можете видеть в приведенном выше примере).
Нет никаких сомнений в том, что приведенное выше утверждение довольно запутанно, поэтому давайте рассмотрим несколько примеров.Допустим, этот код относится к жанрам музыки.Так что в классе Жанр мы будем хотеть разные жанры музыки.Допустим, мы хотим иметь 3 жанра: хип-хоп, рок и кантри.Чтобы сделать это, мы будем использовать имя Class для создания новых экземпляров этого класса.
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в хип-хоп, написав следующее
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"