• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kompozycja c#

VPS Starter Arubacloud
0 głosów
1,665 wizyt
pytanie zadane 21 grudnia 2017 w C# przez PelikanFix16 Użytkownik (950 p.)

Dzień dobry, po kursie na udemy "C# Intermediate: Classes, Interfaces and OOP" napisałem na szybko przykład użycia kompozycji.
Czy to jest prawidłowo wykonane?
Jeżeli nie, które elementy należy poprawić, aby było to prawidłowo wykonane.

 

using System;

namespace composition
{
    public interface IVehicle
    {
        int Fuel { get; }
        void Drive();
        void Refuel(int fuel);
       
    }
    public interface IEngine
    {   
        int RotationSpeed { get; }
        void ChangeRotationSpeed(int rotation);

    }

    public class Engine:IEngine
    {
        public int RotationSpeed { get; private set; }
        public Engine(int rotation)
        {
            RotationSpeed = rotation;
        }

        public void ChangeRotationSpeed(int rotation)
        {
            if (rotation<=0)
            {
                throw new Exception("Bad rotation number");
            }
            RotationSpeed = rotation;


        }

    }
    public class Vehicle : IVehicle
    {
        private readonly IEngine _engine;
        public int Fuel { get; private set; }

        public Vehicle(IEngine engine)
        {
            _engine = engine;
        }
        public void Refuel(int fuel)
        {
            Fuel = fuel;
        }

        public void Drive()
        {
            if (_engine.RotationSpeed == 0)
            {
                throw new Exception("No fuel");
            }
            Fuel--;
            _engine.ChangeRotationSpeed(Fuel*13);
            


        }
    }
    public class Plane : Vehicle
    {
        public Plane(IEngine engine):
            base(engine)
        {

        }
    }
    public class Car : Vehicle
    {
        public Car(IEngine engine) :
            base(engine)
        {

        }
    }
    public class Boat : Vehicle
    {
        public Boat(IEngine engine) :
            base(engine)
        {

        }
    }





    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                IVehicle boat = new Boat(new Engine(100));
                boat.Refuel(200);
                while (boat.Fuel != 0)
                {
                    boat.Drive();
                    Console.WriteLine(boat.Fuel);
                }
            
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.ReadKey();
            }
          


        }
    }
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 986 wizyt
0 głosów
0 odpowiedzi 454 wizyt
pytanie zadane 16 grudnia 2017 w Systemy operacyjne, programy przez pionk18 Obywatel (1,590 p.)
0 głosów
1 odpowiedź 1,112 wizyt
pytanie zadane 17 października 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,369 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...