Wiek wyliczany automatycznie we właściwości klasy

0

Witam,
Utworzyłem klase Customer taką jak poniżej i chciałbym po pierwsze zapytać co jest w niej do poprawy z perespektywy zasad OOP? Czy wszystkie wlasciwosci powinny byc private ? czy np tylko settery w nich ? Chciałbym róznież zapytac co jest zle napisane we wlasciwoci Age ze nie wylicza mi ona sama wieku uzytkownika ?

class Customer
    {
        private int _age;

        public string Name { get; set; }

        public string SurName { get; set; }               

        public DateTime DateOfBirth { get; set; }       //ToChange

        public int Age
        {
            get { return _age; }

            private set { _age = DateTime.Now.Year - DateOfBirth.Year; }
        }       
}   
2

Twój setter:

private set { _age = DateTime.Now.Year - DateOfBirth.Year; }

Nie jest nigdy wykonywany. Setter wykonuje się w momencie gdy ustawiasz wartość. To co chcesz zrobić możesz osiągnąć poprzez ustawienie settera dla DateOfBirth:

public DateTime DateOfBirth { get => dateOfBirth; set { dateOfBirth = value; _age = DateTime.Now.Year - DateOfBirth.Year; } } 

ale czy to jest najlepsza opcja na osiągnięcie tego co chcesz to niech się wypowie ktoś bardziej doświadczony.

Co do OOP. Ja nie jestem zwolennikiem używania full prop.
EDIT: Jeżeli chodzi o nazewnictwo to wg. mnie zmienna prywatna nie powinna być poprzedzana znakiem _.

4

Tylko po co w ogóle tutaj pole i setter?

 public int Age
{
    get { return DateTime.Now.Year - DateOfBirth.Year; }
}

Co do podkreślnika w nazwach pól, to też tego nie lubię, ale jest to bardzo częsta konwencja, więc chcemy czy nie chcemy, trzeba się przyzwyczaić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1