Entonces, según tengo entendido, { get; set; }
es una "propiedad automática" que, al igual que @Klaus y @Brandon dijeron, es una forma abreviada de escribir una propiedad con un "campo de respaldo". Entonces en este caso:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
Sin embargo, si eres como yo, hace aproximadamente una hora, no entiendes realmente qué son las propiedades y los accesorios , y tampoco tienes la mejor comprensión de algunas terminologías básicas. MSDN es una gran herramienta para aprender cosas como esta, pero no siempre es fácil de entender para los principiantes. Así que voy a tratar de explicar esto más en profundidad aquí.
get
y set
son accesores , lo que significa que pueden acceder a datos e información en campos privados (generalmente desde un campo de respaldo ) y generalmente lo hacen desde propiedades públicas (como puede ver en el ejemplo anterior).
No se puede negar que la declaración anterior es bastante confusa, así que veamos algunos ejemplos. Digamos que este código se refiere a géneros de música. Entonces dentro de la clase Género, vamos a querer diferentes géneros de música. Digamos que queremos tener 3 géneros: Hip Hop, Rock y Country. Para hacer esto, usaríamos el nombre de la Clase para crear nuevas instancias de esa clase.
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)
Ahora que hemos creado las instancias de la clase Genre, podemos establecer los nombres de los géneros utilizando la propiedad 'Name' que se estableció arriba.
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 establecer el nombre de 'g1' en Hip Hop escribiendo lo siguiente
g1.Name = "Hip Hop";
Lo que está sucediendo aquí es algo complejo. Como dije antes, get
y set
acceda a información de campos privados a los que de otro modo no podría acceder. get
solo puede leer información de ese campo privado y devolverla. set
solo puede escribir información en ese campo privado. Pero al tener una propiedad con ambos get
y set
podemos hacer ambas funciones. Y al escribir g1.Name = "Hip Hop";
, estamos utilizando específicamente la set
función de nuestra propiedad Nombre
set
usa una variable implícita llamada value
. Básicamente, lo que esto significa es que cada vez que ves "valor" dentro set
, se refiere a una variable; la variable "valor". Cuando escribimos g1.Name =
estamos usando =
para pasar la value
variable que en este caso es "Hip Hop"
. Así que esencialmente puedes pensarlo así:
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"'
}
}
Es importante tener en cuenta que el ejemplo anterior no está escrito en el código. Es más un código hipotético que representa lo que está sucediendo en segundo plano.
Así que ahora que hemos establecido el Nombre de la instancia g1 de Genre , creo que podemos obtener el nombre escribiendo
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"
y si ejecutamos esto, entraríamos "Hip Hop"
en nuestra consola.
Entonces, para el propósito de esta explicación, también completaré el ejemplo con resultados
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);
}
}
Salida:
"Genres: Hip Hop, Rock, Country"