Uczę się ASP.NET MVC i potrafię czytać dokumenty w języku angielskim, ale tak naprawdę nie rozumiem, co dzieje się w tym kodzie:
public class Genre
{
public string Name { get; set; }
}
Co to znaczy { get; set; }
:?
c#
properties
kn3l
źródło
źródło
{get; set;}
, tworzysz pole, ale jeśli je umieścisz{get; set;}
, tworzysz właściwość . Posiadanie właściwości może ułatwić niektóre rzeczy, szczególnie podczas pracy z Reflection.Odpowiedzi:
Jest to tak zwana właściwość auto i jest w skrócie następująca (podobny kod zostanie wygenerowany przez kompilator):
źródło
=
operatora, ale tylko dla jednego konkretnego elementu, prawda?name
jest tworzona żadna zmienna prywatna . Jeśli spróbujesz odwołać się do tej zmiennej prywatnej w klasie, zakończy się ona niepowodzeniem. Nie jestem pewien, jak to robi C #, ale zachowuje się tak, jakby istniała zmienna prywatna bez nazwy, do której nie można uzyskać dostępu w kodzie.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: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
iset
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.
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.
Możemy ustawić nazwę „g1” na Hip Hop, pisząc poniżej
To, co się tutaj dzieje, jest trochę skomplikowane. Jak powiedziałem wcześniej,
get
iset
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 obuget
iset
jesteśmy w stanie zrobić obie te funkcje. Piszącg1.Name = "Hip Hop";
, korzystamy zset
funkcji z naszej właściwości Nameset
używa niejawnej zmiennej o nazwievalue
. Zasadniczo oznacza to, że za każdym razem, gdy zobaczysz „wartość” w środkuset
, odnosi się to do zmiennej; zmienna „wartość”. Kiedy piszemyg1.Name =
, używamy=
do przekazaniavalue
zmiennej, która w tym przypadku jest"Hip Hop"
. Możesz zasadniczo myśleć o tym w ten sposób: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
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
Wynik:
źródło
set{name = value;} // 'value' here is equal to "Hip Hop"
get
iset
. Link, który podałem, ma świetny cytat od Johna Guttaga na górze strony. Poleciłbym przeczytać jego książkę lub nawet wziąć udział w tym darmowym kursie onlinepublic class Genre{public string Name;}
zamiast:public class Genre{ public string Name { get; set; }}
. Mam na myśli, dlaczego potrzebujemy {get; zestaw; }?To są właściwości automatyczne
Zasadniczo inny sposób pisania właściwości z polem zaplecza.
źródło
get
i trwało przy użyciuset
). Jak szafka, do którejget
iset
otwiera drzwi._name
. We właściwości automatycznej pole podkładu jest ukryte.Oto krótki sposób na zrobienie tego:
źródło
Jest to skrót do ujawnienia członków danych jako publicznych, dzięki czemu nie trzeba jawnie tworzyć prywatnych członków danych. C # utworzy dla Ciebie prywatnego członka danych.
Możesz po prostu upublicznić członków danych bez korzystania z tego skrótu, ale jeśli zdecydujesz się zmienić implementację członka danych, aby mieć trochę logiki, musisz przerwać interfejs. Krótko mówiąc, jest to skrót do tworzenia bardziej elastycznego kodu.
źródło
Zasadniczo jest to skrót:
źródło
Jest to automatycznie implementowana właściwość dla C #.
źródło
get; set;
jest wywoływany?null
jak każdastring
zmienna dosomeInstanceOfGenere.Name = "someValue"
Są to akcesory do własności publicznej Nazwa.
Użyłbyś ich, aby uzyskać / ustawić wartość tej właściwości w instancji gatunku.
źródło
To właściwość automatycznie wdrażana. Jest to w zasadzie skrócony sposób tworzenia właściwości dla klasy w języku C #, bez konieczności definiowania dla nich zmiennych prywatnych. Są one zwykle używane, gdy nie jest wymagana dodatkowa logika podczas uzyskiwania lub ustawiania wartości zmiennej.
Możesz przeczytać więcej na temat Przewodnika programowania właściwości zaimplementowanych automatycznie MSDN .
źródło
Wzorzec get / set zapewnia strukturę, która pozwala na dodanie logiki podczas ustawiania („set”) lub pobierania („get”) instancji właściwości instancji klasy, co może być przydatne, gdy wymagana jest pewna logika tworzenia instancji własność.
Właściwość może mieć tylko moduł „get”, który jest wykonywany w celu uczynienia tej właściwości tylko do odczytu
Podczas implementowania wzorca get / set zmienna pośrednia jest używana jako kontener, w którym można umieścić wartość i wyodrębnić wartość. Zmienna pośrednia jest zwykle poprzedzona znakiem podkreślenia. ta zmienna pośrednia jest prywatna, aby zapewnić, że można uzyskać do niej dostęp tylko poprzez wywołania get / set. Zobacz odpowiedź Brandona, ponieważ jego odpowiedź demonstruje najczęściej stosowane konwencje składniowe do implementacji get / set.
źródło
Oznacza to, że jeśli utworzysz zmienną typu Gatunek, będziesz mógł uzyskać do niej dostęp jako właściwość
źródło
Taka
{ get; set; }
składnia nosi nazwę właściwości automatycznych, składnia C # 3.0Do kompilacji musisz użyć Visual C # 2008 / csc v3.5 lub nowszej wersji. Ale możesz skompilować dane wyjściowe, które są tak niskie, jak .NET Framework 2.0 (nie jest wymagane środowisko wykonawcze ani klasy do obsługi tej funkcji).
źródło
W programie Visual Studio, jeśli zdefiniujesz właściwość
X
w klasie i chcesz używać tej klasy tylko jako typu, po zbudowaniu projektu otrzymasz ostrzeżenie z informacją: „Pole X nigdy nie jest przypisane i zawsze ma swoją wartość domyślną wartość ” .Dodając właściwość
{ get; set; }
doX
, nie otrzymasz tego ostrzeżenia.Ponadto w Visual Studio 2013 i wyższych wersjach, dodając,
{ get; set; }
możesz zobaczyć wszystkie odwołania do tej właściwości.źródło
Zasadniczo jest to skrót. Możesz pisać
public string Name { get; set; }
jak w wielu przykładach, ale możesz także napisać:Dlaczego jest używany? Można go użyć do filtrowania dostępu do właściwości, na przykład nie chcesz, aby nazwy zawierały liczby.
Dam ci przykład:
Oficjalnie nazywa się to Auto-Implemented Properties i ma dobry nawyk czytania ( przewodnik po programowaniu ). Poleciłbym również wideo instruktażowe Właściwości C #: Po co używać „get” i „set” .
źródło
Get set to modyfikatory dostępu do właściwości. Pobierz odczytuje pole właściwości. Zestaw ustawia wartość właściwości. Uzyskaj jest jak dostęp tylko do odczytu. Zestaw przypomina dostęp tylko do zapisu. Aby użyć właściwości jako do odczytu, napisz zarówno get, jak i set.
źródło
Funkcja Get jest wywoływana, gdy właściwość pojawia się po prawej stronie (RHS). Zestaw jest wywoływany, gdy właściwość pojawia się po lewej stronie (LHS) symbolu „=”.
W przypadku właściwości zaimplementowanej automatycznie pole podkładu działa za sceną i nie jest widoczne.
Przykład:
Natomiast w przypadku właściwości niezaimplementowanej automatycznie pole zaplecza jest z góry widoczne jako zmienna o prywatnym zasięgu.
Przykład:
Warto również zauważyć, że „getter” i „setter” mogą używać innego „pola zaplecza”
źródło
Zdefiniuj zmienne prywatne
Wewnątrz Konstruktora i załaduj dane
Utworzyłem Constant i ładuję dane ze stałej do klasy Selected List.
źródło
Właściwość jest jak warstwa, która oddziela zmienną prywatną od innych elementów klasy. Ze świata zewnętrznego wydaje się, że właściwość jest tylko polem, do właściwości można uzyskać dostęp za pomocą .Property
Pełna nazwa jest właściwością. Ten ze strzałką jest skrótem. Ze świata zewnętrznego możemy uzyskać dostęp do FullName w następujący sposób:
Dzwoniący nie dbają o to, jak zaimplementowałeś FullName. Ale w klasie możesz zmienić FullName, co tylko chcesz.
Sprawdź dokumentację Microsoft, aby uzyskać bardziej szczegółowe wyjaśnienia:
https://docs.microsoft.com/en-us/dotnet/csharp/properties
źródło