Pelo que entendi, { get; set; }
é uma "propriedade automática" que, como @Klaus e @Brandon disseram, é uma abreviação para escrever uma propriedade com um "campo de apoio". Então, neste caso:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
No entanto, se você é como eu - cerca de uma hora atrás - você realmente não entende o que são propriedades e acessadores e também não tem o melhor entendimento de algumas terminologias básicas. O MSDN é uma ótima ferramenta para aprender coisas como essa, mas nem sempre é fácil de entender para iniciantes. Então, vou tentar explicar isso mais profundamente aqui.
get
e set
são acessadores , o que significa que eles podem acessar dados e informações em campos particulares (geralmente de um campo de apoio ) e geralmente de propriedades públicas (como você pode ver no exemplo acima).
Não há como negar que a declaração acima é bastante confusa, então vamos dar alguns exemplos. Digamos que esse código esteja se referindo a gêneros musicais. Então, dentro da classe Gênero, vamos querer diferentes gêneros musicais. Digamos que queremos ter três gêneros: Hip Hop, Rock e Country. Para fazer isso, usaríamos o nome da classe para criar novas instâncias dessa classe.
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)
Agora que criamos as instâncias da classe Genre, podemos definir os nomes dos gêneros usando a propriedade 'Name' que foi configurada acima.
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
Podemos definir o nome de 'g1' para Hip Hop, escrevendo o seguinte
g1.Name = "Hip Hop";
O que está acontecendo aqui é meio complexo. Como eu disse antes, get
e set
acesse informações de campos particulares que você não conseguiria acessar. get
só pode ler informações desse campo privado e devolvê-las. set
só pode gravar informações nesse campo privado. Mas, tendo uma propriedade com ambos get
e set
somos capazes de executar essas duas funções. E, escrevendo g1.Name = "Hip Hop";
, estamos especificamente usando a set
função da nossa propriedade Name
set
usa uma variável implícita chamada value
. Basicamente, o que isso significa é que sempre que você vê "valor" set
, está se referindo a uma variável; a variável "value". Quando escrevemos g1.Name =
, estamos usando o =
para passar a value
variável que, neste caso, é "Hip Hop"
. Então você pode essencialmente pensar assim:
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"'
}
}
É importante observar que o exemplo acima não está realmente escrito no código. É mais um código hipotético que representa o que está acontecendo em segundo plano.
Então agora que definimos o nome da instância g1 do gênero , acredito que podemos obter o nome escrevendo
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"
e se rodássemos isso, entraríamos "Hip Hop"
em nosso console.
Portanto, para o propósito desta explicação, completarei o exemplo com saídas também
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);
}
}
Resultado:
"Genres: Hip Hop, Rock, Country"