Tak więc, jak rozumiem, { get; set; }
jest to „własność automatyczna”, która podobnie jak @Klaus i @Brandon powiedzieli, że jest skrótem do pisania właściwości z „polem zaplecza”. Więc w tym przypadku:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
Jednak jeśli jesteś podobny do mnie - mniej więcej godzinę temu - tak naprawdę nie rozumiesz, jakie są właściwości i akcesoria , a także nie masz najlepszego zrozumienia niektórych podstawowych terminologii. MSDN to świetne narzędzie do nauki takich rzeczy, ale nie zawsze jest łatwe do zrozumienia dla początkujących. Spróbuję więc wyjaśnić to bardziej szczegółowo tutaj.
get
i set
są akcesorami , co oznacza, że mogą uzyskiwać dostęp do danych i informacji w polach prywatnych (zwykle z pola zaplecza ) i zwykle robią to z właściwości publicznych (jak widać w powyższym przykładzie).
Nie można zaprzeczyć, że powyższe stwierdzenie jest dość mylące, więc przejdźmy do kilku przykładów. Powiedzmy, że ten kod odnosi się do gatunków muzycznych. Dlatego w ramach klasy Gatunek chcemy różnych gatunków muzycznych. Powiedzmy, że chcemy mieć 3 gatunki: Hip Hop, Rock i Country. Aby to zrobić, użylibyśmy nazwy klasy do utworzenia nowych instancji tej klasy.
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)
Teraz, stworzyliśmy instancje klasy gatunku możemy ustawić nazwy rodzajowe używając „name” właściwość , która została powołana aż powyżej.
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
Możemy ustawić nazwę „g1” na Hip Hop, pisząc poniżej
g1.Name = "Hip Hop";
To, co się tutaj dzieje, jest trochę skomplikowane. Jak powiedziałem wcześniej, get
i set
uzyskaj dostęp do informacji z prywatnych pól, do których w innym przypadku nie miałbyś dostępu. get
może tylko odczytać informacje z tego prywatnego pola i zwrócić je. set
może zapisywać informacje tylko w tym prywatnym polu. Ale przez posiadające nieruchomość na obu get
i set
jesteśmy w stanie zrobić obie te funkcje. Pisząc g1.Name = "Hip Hop";
, korzystamy z set
funkcji z naszej właściwości Name
set
używa niejawnej zmiennej o nazwie value
. Zasadniczo oznacza to, że za każdym razem, gdy zobaczysz „wartość” w środku set
, odnosi się to do zmiennej; zmienna „wartość”. Kiedy piszemy g1.Name =
, używamy =
do przekazania value
zmiennej, która w tym przypadku jest "Hip Hop"
. Możesz zasadniczo myśleć o tym w ten sposób:
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"'
}
}
Należy zauważyć, że powyższy przykład nie jest tak naprawdę zapisany w kodzie. To bardziej hipotetyczny kod, który reprezentuje to, co dzieje się w tle.
Więc teraz, kiedy ustawiliśmy nazwę instancji g1 gatunku , wierzę, że możemy uzyskać nazwę pisząc
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"
i gdybyśmy to uruchomili, dostalibyśmy się "Hip Hop"
na konsolę.
Dla celów tego objaśnienia uzupełnię również przykład o dane wyjściowe
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);
}
}
Wynik:
"Genres: Hip Hop, Rock, Country"