Nie mam dużego doświadczenia w C#, ale kojarzę taki temat jak tzw. propertisy.
Czy lepiej jest korzystać z publicznych propertisów, czy ze zwykłych pól?
Chodzi mi o różnicę pomiędzy:
public bool Test;
a
public bool Test { get; set; }
Nie mam dużego doświadczenia w C#, ale kojarzę taki temat jak tzw. propertisy.
Czy lepiej jest korzystać z publicznych propertisów, czy ze zwykłych pól?
Chodzi mi o różnicę pomiędzy:
public bool Test;
a
public bool Test { get; set; }
Korzystając ze zwykłych pól wystawiasz się na ryzyko, że w przyszłości będziesz mógł próbować wpisać tam coś niewłaściwego.
Akurat w przypadku pola typu bool, to nie ma aż takiego dużego znaczenia, ale gdybyśmy chcieli na przykład przetrzymywać pole z imieniem, to we właściwości możemy uchronić się przed wpisaniem tam, np. stringa z ciągiem cyfr (odpowiednio modyfikując metodę set).
Dodatkowo, gdy korzystamy z właściwości dostajemy możliwość dodania tam BreakPointa oraz implementowanie tam dodatkowych mechanizmów (np. INotifyPropertyChanged etc.). Dodatkowo po usunięciu set lub get możemy odpowiednio tworzyć właściwości tylko do zapisu lub odczytu.
Witaj Michale.
Tak jak Paweł słusznie nadmienił właściwości (tzw. properties), dają nam znacznie większe możliwości manipulacji danymi niż zmienne.
Przedstawię najważniejsze zalety właściwości:
public bool Test { get { return test; } set { value = test; } }
public int Age { get { return age; } set { if (age > 18 && age < 100) { value = age; } else { //...some operations } } }
Odpowiedź na Twoje pytanie uzależniona jest od logiki aplikacji, jeśli będzie to prosta aplikacja wystarczą pola, z kolei jeśli będzie to bardziej złożona aplikacja sugeruję użycie właściwości.
Stosowanie publicznych zmiennych jest złą praktyką. Łatwo w ten sposób zakłócić działanie jakiegoś algorytmu gdyż operujesz bezpośrednio na zmiennych i to bez żadnego nadzoru.
Jeśli potrzebujesz mieć pole publiczne to koniecznie tylko poprzez właściwość! Możesz wówczas w setterze dodać jakąś walidację, np. zakresu wprowadzanej wartości albo stanu aplikacji.
Ale nawet jeśli nie przewidujesz żadnej walidacji to i tak warto stosować właściwości. Wiele technologii .NET korzysta tylko z właściwości i pomija publiczne pola. Na przykład WPF potrafi wiązać kontrolki z danymi (Databinding) ale tylko pod warunkiem, że są to właściwości. Zdarzyło mi się kiedyś poprawiać po kimś cały model, bo programista zrobił same publiczne pola i databinding nie chciał działać.
Moim skromnym zdaniem nie ma tutaj znaczenia wielkość aplikacji.