Delegaty - mój własny pomysł na program

2015-02-12 19:10
0

Witam, postanowiłem zrozumieć delegaty pisząc jakiś własny programik. Dlatego że od dziecka interesuje się mechaniką wymyśliłem program korzystający z delegat, który będzie przypominał użytkownikowi samochodu że po przejechaniu określonej ilości kilometrów musi zrobić różne rzeczy, np wymienić olej w silniku. Klasy odpowiedzialne za pilnowanie czy trzeba już coś zrobić przy aucie będą delegatami(nie wiem czy mogę tak powiedzieć) i będzie można dodawać ich sporo więcej dla innych funkcjonalności związanych z przebiegiem (wkleję tylko jedną żeby nie było za długie)
Wymyśliłem że przejechane kilometry będzie się wpisywało ręcznie(żeby to działało) przed zatankowaniem samochodu na stacji, tym samym program też będzie obliczał spalanie itp ale póki co tego nie ma. Nie o to tu chodzi.
Proszę dajcie znać co sądzicie o użyciu delegat w moim pomyślę. Czy wgl mój programik się do czegoś nadaje, jeżeli tak co powinienem w nim zmienić żeby wyglądał bardziej profesjonalnie. Z góry dzięki.

 class Petrol
    {
        public delegate void DistanceToChange(double msg);
        public DistanceToChange distance;

        public void Distance(double km)
        {

            distance(km); 
        }
    }

class OilEngine
    {
        public double kilometers;
        public string F = "";

        public void Distance1(double msg) 
        {
            kilometers += msg;
            if (kilometers >= 13000)
            {
                Console.WriteLine("Od wymiany oleju przejechałeś " + kilometers + " km, Konieczna wymiana oleju!!\n Jeżeli wymieniłeś olej naciśnij 1 ");
                F = Console.ReadLine();
                if (F == "1")
                {
                    kilometers = 0;
                }
                else
                {
                    Console.WriteLine("Koniecznie wymień olej");
                }

            }
            else
            {
                Console.WriteLine("Od wymiany oleju przejechałeś " + kilometers + " km");
            }

        }

            public OilEngine(Petrol petrol) 
            {
                petrol.distance += Distance1; 
            }

    }

class Program
    {
        static void Main(string[] args)
        {
            Petrol petrol = new Petrol();
            OilEngine oilengine = new OilEngine(petrol); //przekazujemy do konstruktora: petrol
            FuelFilter fuelfilter = new FuelFilter(petrol);

            string T = "";
            while ( T != "tak")
            {
            Console.WriteLine("Podaj ilość przejechanych kilometrów przed zatankowaniem samochodu");
            string text = Console.ReadLine();
            double value = double.Parse(text);

            petrol.Distance(value);
            Console.WriteLine("\nJeżeli chcesz wyjść wpisz 'tak' Jeżeli nie naciśnij 'ENTER'\n");

            T = Console.ReadLine();
            Console.Clear();

            }

            Console.Read();
        }
    }

Pozostało 580 znaków

2015-02-12 20:52
0

Nie ogarniam...

Może tak, przestań kombinować co tu zrobić aby koniecznie wykorzystać delegaty, po prostu pisz programy. A kiedyś za tydzień, miesiąc czy za pół roku delegaty cię same znajdą.

Czyli to co napisałem to totalna porażka ? :P - RideorDie 2015-02-12 21:31
Nie wiem co ten program ma robić nawet. - dam1an 2015-02-12 21:58
Klasa Program pobiera od użytkownika ilość przejechanych kilometrów. Wartość ta przekazywana jest do klasy Petrol w której też zadeklarowana jest delegata. Za pomocą delegaty wartość wpisana przez użytkownika przesyłana jest do klasy OilEngine (metoda Distance1). W tej metodzie sprawdzane jest ile zostało przejechanych km. Jeżeli wartość ta przekroczy dozwoloną wartość wyskoczy alert że trzeba wymienić olej. Wyobraziłem sobie w tym programie że te delegaty się przydadzą bo mogę dodawać kolejne klasy korzystające z delegaty dotyczące wymiany innych elementów np filtrów itd, - RideorDie 2015-02-13 00:00

Pozostało 580 znaków

2015-02-13 00:13
1

Delegaty pozwalają na przekazanie jednej metody do drugiej jako jej argument. Przy czym teraz, dzięki Func<> i Action<> nie ma sensu tego robić. Nie warto szukać ich zastosowania na siłę.
Generalnie, delegatów rzadko się używa, a w 90% przypadków robi się to przy okazji użycia zdarzeń w aplikacjach GUI, a tam zdefiniowanie wszystkiego odbywa się dwuklikiem myszy, i człowiek nawet się nie zastanawia jak to działa, po prostu pisze kod.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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