Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 6
  • 80

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; }

Michał_Niciński
  • Zapytał
  • @ Michał_Niciński | 29.01.2016
    • 1
    • 0
    • 3
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedzi (3)

  • 3

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.

Paweł_Szarzyński
  • Odpowiedział
  • @ Paweł_Szarzyński | 03.02.2016
    • 0
    • 0
    • 0
  • 0

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:

  • mogą posiadać dwa akcesory (get - pobieranie danych, set - zapis danych), np:

        public bool Test
        {
            get { return test; }
            set { value = test; }
        }
  • właściwości mogą również posiadać jeden z akcesorów, dzięki czemu uzyskamy wartość tylko do odczytu, lub tylko do zapisu,
  • dla każdego akcesora możemy zastosować inne specyfikatory dostępu (np. public get, oraz privete set),
  • właściwości mogą zawierać dodatkową logikę, np:
        public int Age
        {
            get { return age; }
            set
            {
                if (age > 18 && age < 100)
                {
                    value = age;
                }

                else
                {
                    //...some operations
                }

            }
        }
  • interfejs może zawierać właściwości, natomiast nie może zawierać zmiennych.

 

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.

 

 

 

 

 

 

 

  • Odpowiedział
  • @ | 05.02.2016
  • TRENER ALTKOM AKADEMII
  • 3

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.

 

  • Odpowiedział
  • @ | 18.03.2016
  • TRENER ALTKOM AKADEMII