Soweit ich weiß, { get; set; }
handelt es sich um eine "Auto-Eigenschaft", die genau wie @Klaus und @Brandon eine Abkürzung für das Schreiben einer Eigenschaft mit einem "Hintergrundfeld" darstellt. Also in diesem Fall:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
Wenn Sie jedoch wie ich sind - vor ungefähr einer Stunde -, verstehen Sie die Eigenschaften und Accessoren nicht wirklich und haben auch nicht das beste Verständnis für einige grundlegende Terminologien. MSDN ist ein großartiges Werkzeug, um solche Dinge zu lernen, aber für Anfänger ist es nicht immer leicht zu verstehen. Also werde ich versuchen, dies hier ausführlicher zu erklären.
get
und set
sind Accessoren , dh sie können auf Daten und Informationen in privaten Feldern zugreifen (normalerweise über ein Hintergrundfeld ) und dies normalerweise über öffentliche Eigenschaften (wie Sie im obigen Beispiel sehen können).
Es ist nicht zu leugnen, dass die obige Aussage ziemlich verwirrend ist, also gehen wir auf einige Beispiele ein. Angenommen, dieser Code bezieht sich auf Musikgenres. Innerhalb des Klassengenres werden wir also verschiedene Musikgenres wollen. Angenommen, wir möchten drei Genres haben: Hip Hop, Rock und Country. Dazu verwenden wir den Namen der Klasse , um neue Instanzen dieser Klasse zu erstellen .
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)
Nachdem wir die Instanzen der Genre-Klasse erstellt haben, können wir die Genre-Namen mithilfe der oben festgelegten Eigenschaft 'Name' festlegen.
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
Wir können den Namen 'g1' auf Hip Hop setzen, indem wir Folgendes schreiben
g1.Name = "Hip Hop";
Was hier passiert, ist ziemlich komplex. Wie ich bereits sagte, get
und set
greifen Sie auf Informationen aus privaten Feldern zu, auf die Sie sonst nicht zugreifen könnten. get
kann nur Informationen aus diesem privaten Feld lesen und zurückgeben. set
kann nur Informationen in dieses private Feld schreiben . Aber wenn wir eine Eigenschaft mit beiden haben get
und set
beide Funktionen ausführen können. Und indem g1.Name = "Hip Hop";
wir schreiben, verwenden wir speziell die set
Funktion aus unserer Name-Eigenschaft
set
verwendet eine implizite Variable namens value
. Grundsätzlich bedeutet dies, dass jedes Mal, wenn Sie "Wert" darin sehen set
, es sich auf eine Variable bezieht; die Variable "Wert". Wenn wir schreiben, verwenden g1.Name =
wir das =
, um die value
Variable zu übergeben, die in diesem Fall ist "Hip Hop"
. Sie können sich das also im Wesentlichen so vorstellen:
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 ist wichtig zu beachten, dass das obige Beispiel nicht tatsächlich im Code geschrieben ist. Es ist eher ein hypothetischer Code, der darstellt, was im Hintergrund vor sich geht.
So , jetzt haben wir haben festgelegt , den Namen der g1 Instanz Genre , glaube ich , können wir erhalten den Namen von Schrift
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"
und wenn wir dies ausführen würden, würden wir "Hip Hop"
in unsere Konsole bekommen.
Zum Zweck dieser Erklärung werde ich das Beispiel auch mit Ausgaben vervollständigen
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);
}
}
Ausgabe:
"Genres: Hip Hop, Rock, Country"