Итак, насколько я понимаю, это { 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)
Теперь, когда мы создали экземпляры класса Genre, мы можем установить названия жанров, используя свойство '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"