Akcesory w C#

0

Mam problem ze zrozumieniem właściwości w C#. Tzn wiem że get zwraca wartość a set ją ustawia. Mam do napisania klasę Godzina:
Godzina — reprezentuje czas jako trójkę (godzina, minuta, sekunda), oraz metody:
dodaj (int sekundy) (zwiększa czas o podaną liczbę sekund), dodaj (Godzina g)
(zwiększa czas o liczbę sekund od północy do g), operator binarny -(Godzina g1,
Godzina g2) obliczający liczbę sekund pomiędzy czasami, oraz właściwość Sekundy obliczającą liczbę sekund od północy. Przyjmij, że godzina to liczba naturalna z przedziału [0 ... 23], a minuty i sekundy to liczby z przedziału [0 ... 59].

i jak napisać właściwość Sekundy? do czego ona ma się odnosić w moim programie i po co ona w ogóle?

Mój program wygląda na razie tak:

class Godzina
    {
        public int sekunda, minuta, godzina;

        public void dodaj(int sekundy)
        {
            this.godzina += (int)(sekundy / 3600);
            if (this.godzina >= 24)
            {
                this.godzina = (this.godzina % 24);
            }
            this.minuta  += (int)((sekundy % 3600) / 60);
            if (this.minuta >= 60)
            {
                this.minuta = (this.minuta % 60);
                this.godzina++;
            }
            this.sekunda += (sekundy % 60);
            if (this.sekunda >= 60)
            {
                this.sekunda = (this.sekunda % 60);
                this.minuta++;
            }
             
        }

        public void dodaj(Godzina g)
        {
            int sek;
            sek = g.godzina * 3600 + g.minuta * 60 + g.sekunda;

            dodaj(sek);
        }

        public static int operator -(Godzina g1, Godzina g2)
        {
            int sek1, sek2;
            sek1 = g1.godzina * 3600 + g1.minuta * 60 + g1.sekunda;
            sek2 = g2.godzina * 3600 + g2.minuta * 60 + g2.sekunda;

            return Math.Abs(sek1 - sek2);
        }

}

0

Przykład Auto Propercji:

class Godzina
    {
        public int Sekunda {get;set;}
        public int Godzina{get;set;}
        public int Minuta{get;set;}
    ....
   }

Przykład bez auto propercji

class Godzina
    {
       private int sekunda;

        public int Sekunda {
           get
           { 
                return sekunda;
            }
           set
           { 
              sekunda = value;
           }

    ....
   }

Dlaczego czasami warto stosować właściwości.
Jest to dobra praktyka programistyczna pozwalająca później w łatwiejszy sposób zmodyfikować kod.

Wyobraź sobie taką sytuację , że teraz potrzebujesz zaimplementować w swojej klasie nową funkcjonalność.
klient zażyczył sobie by np każde przypisanie nowej wartoiści do pola sekunda inkrementowało jakiś licznik. W kodzie bez właściwości musiałbym teraz przeglądnąć swój kod znaleźć miejsca gdzie przypisujesz wartość do pola "sekunda" i dopisać linijkę

licznik++

W przypadku zastosowania właściwości wystarczy , że zmodyfikujesz tylko właściwość

class Godzina
    {
       private int sekunda;

        public int Sekunda {
           get
           { 
                return sekunda;
            }
           set
           { 
              licznik++;
              sekunda = value;
           }

    ....
   }

Twoja modyfikacja wpłynie teraz na każde przypisanie. Takie rozwiązanie jest mniej podatne na bugi i tańsze w eksploatacji. Oczywiście należy podchodzić do tej kwestii z rozsądkiem ale wg mnie stosowanie właściwości nie wpływa negatywnie na wydajność i czytelność kodu więc dlaczego nie ?

0

no ale jakie to ma zastosowanie w moim kodzie? Ja nie mam zmiennej sekundy nigdzie

0
             this.sekunda += (sekundy % 60);
            if (this.sekunda >= 60)
            {
                this.sekunda = (this.sekunda % 60);
                this.minuta++;
            }

A co niby tutaj robisz ?

0

no ale własciwosc ma wyliczyc liczbe sekund...

0

Jak to jest zadanie od jakiegoś prof , dr , mgra ... to powiedz mu , że pod właściwością Sekunda nie powinno się ukrywać takich obliczeń jak wyliczanie ilości sekund do północy.
To powinna być właściwość PozostałoSekund

        public int PozostałoSekund{
           get
           { 
                return  sekunda + godzina*3600 + minuta*60;
            }
 
0

no ale co musze zmienic w kodzie, jak sie do tego ODWOŁYWAĆ?!
tam gdzie mam zamiane na sekundy wstawic jakiegos X a obliczenia wykonywac we właściwości?

0

POLA sekunda nie ruszaj, dodaj tylko właściwość Sekunda zwracającą wynik obliczenia.

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