Quindi, per quanto ho capito, si { get; set; }
tratta di una "proprietà automatica" che, proprio come @Klaus e @Brandon, è una scorciatoia per la scrittura di una proprietà con un "campo di supporto". Quindi in questo caso:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
Tuttavia, se sei come me - circa un'ora fa - non capisci davvero quali siano le proprietà e gli accessori e non hai nemmeno la migliore comprensione di alcune terminologie di base. MSDN è un ottimo strumento per apprendere cose come questa, ma non è sempre facile da capire per i principianti. Quindi proverò a spiegarlo più in profondità qui.
get
e set
sono accessori , il che significa che sono in grado di accedere a dati e informazioni in campi privati (di solito da un campo di supporto ) e di solito lo fanno da proprietà pubbliche (come puoi vedere nell'esempio sopra).
Non si può negare che l'affermazione di cui sopra sia piuttosto confusa, quindi entriamo in alcuni esempi. Supponiamo che questo codice si riferisca a generi musicali. Quindi, all'interno del genere Class, desidereremo diversi generi musicali. Diciamo che vogliamo avere 3 generi: Hip Hop, Rock e Country. Per fare ciò useremmo il nome della classe per creare nuove istanze di quella 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)
Ora che abbiamo creato le istanze della classe Genre, possiamo impostare i nomi dei generi usando la proprietà 'Name' che è stata impostata sopra.
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
Possiamo impostare il nome di 'g1' su Hip Hop scrivendo quanto segue
g1.Name = "Hip Hop";
Quello che sta succedendo qui è piuttosto complesso. Come ho detto prima, get
e set
accedi alle informazioni da campi privati a cui altrimenti non saresti in grado di accedere. get
può solo leggere le informazioni da quel campo privato e restituirle. set
può solo scrivere informazioni in quel campo privato. Ma avendo una proprietà con entrambi get
e set
siamo in grado di fare entrambe queste funzioni. E scrivendo g1.Name = "Hip Hop";
stiamo usando specificamente la set
funzione dalla nostra proprietà Name
set
usa una variabile implicita chiamata value
. Fondamentalmente, ciò significa che ogni volta che vedi "valore" all'interno set
, si riferisce a una variabile; la variabile "valore". Quando scriviamo g1.Name =
stiamo usando il =
per passare la value
variabile che in questo caso è "Hip Hop"
. Quindi puoi essenzialmente pensarlo in questo modo:
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 notare che l'esempio sopra non è effettivamente scritto nel codice. È più un ipotetico codice che rappresenta ciò che sta accadendo in background.
Quindi ora che abbiamo impostato il nome dell'istanza g1 del genere , credo che possiamo ottenere il nome scrivendo
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 avessimo eseguito questo, saremmo arrivati "Hip Hop"
nella nostra console.
Quindi, ai fini di questa spiegazione, completerò anche l'esempio con gli output
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);
}
}
Produzione:
"Genres: Hip Hop, Rock, Country"