Dziedziczenie klasy/metody

0

Wiam, mam pytanie.
Stworzyłem o to taką klasę

class Seat
    {
        public Seat()
        {
            
            rocznik = 2005;
            cena = 11000;
            model = "Seat Ibiza";
            
            
            
            

        }
        public int rocznik;
        public int cena;
        public string model;
        public int rata;

        
    }

Chciałbym teraz stworzyć drugą klasę, która obliczyła by mi ratę miesięczną auta na 2 lata
czyli 11000/24, i zapisać to jako
cena/24, ponieważ mam 4 klasy z różnymi autami i innymi danymi, chciałbym tę jedną klasę z algorytmem obliczeniowym zastosować do reszty tych klas, ale nie mam pojęcia jak, jestem początkujący, a zadanie do jutra do zrobienia, z góry dzięki.

1

Skoro zadanie na zaliczenie to najprościej:

  • stwórz klasę Auto, która będzie zawierać wspólne pola wszystkich tych klas aut (zapewne Rocznik, Cena, Model, Rata)
  • w klasie Auto stwórz metodę, która zwraca miesięczną ratę: return cena/24
  • poszczególne klasy niech dziedziczą z tej klasy Auto

Wtedy w konstruktorze Seat dopiszesz

rata = ObliczRate();
1

nie obraź się ale po opisie wnioskuję, że to co zrobiłeś jest bez sensu. Może zacznij od opisu CAŁEGO problemu i daj to co masz do tej pory

1

To raczej Twoje rozwiązanie powinno iść w kierunku:

  • klasa Samochod
  • klasa ObliczaczRat

Tworzysz instancje klasy Samochód, które są konkretnymi autami.
a klasa ObliczaczRat będzie miała metodę, która jako parametr wejściowy bedzie pryzjmowała albo cenę samochodu albo Samochód.
jaką technikę przyjmiesz, tak będziesz potem implementował.

ewentualnie w klasie samochodu mieć metoda, żeby sobie wyliczała wysokość raty.

na takie zadanie jest mnóstwo rozwiązań, bardziej lub mniej widowiskowych :D

1

Przede wszystkim to zadanie nie ma nic z dziedziczeniem.

Idealne rozwiązanie jest takie (to, co mówił @leggo):

public class Auto
{
  public int Year {get; set;}
  public decimal Price {get;set;}
  public string Model {get; private set;} //to może być też jakiś enum, nie wiemy co chcesz tak naprawdę mieć

  public Auto(string model)
  {
    Model = model;
  }
}

Tutaj konstruktor jak i cała klasa może być w miarę dowolnie budowana, jeśli chodzi o właściwości. Nie wiemy dokładnie co chcesz uzyskać. Na pewno pamiętaj, żeby nigdy nie upubliczniać swoich pól, tak jak to zrobiłeś. To właściwości powinny być publiczne, a nie pola, czyli:

public int Year {get; set;}

zamiast:

public int year;

Ewentualnie właściwość z tzw. "backing field":

int year;
public int Year
{
  get { return yesr; }
  set { year = value; }
}

Drugą klasą, jaką powinieneś mieć to coś do obliczania rat, np:

public class PricePartCalculator
{
  public decimal CalculateMonthPrice(Auto auto, int yearCount)
  {
    return auto.Price / yearCount / 12;
  }
}

Można też tak:

public class PricePartCalculator
{
  int yearCount;
  public PricePartCalculator(int yearCount)
  {
    this.yearCount = yearCount;
  }

  public decimal CalculateMonthPrice(Auto auto)
  {
    return auto.Price / yearCount / 12;
  }
}

Można też tak:

public abstract class PricePartCalculator
{
  protected  int yearCount;
  public PricePartCalculator(int yearCount)
  {
    this.yearCount = yearCount;
  }

  public abstract decimal CalculatePricePart(Auto auto);
}

public class MonthPriceCalculator: PricePartCalculator
{
  public MonthPriceCalculator(int yearCount): base(yearCount)
  {

  }

  public override decimal CalculatePricePart(Auto auto)
  {
    //itd.
  }
}

Miłej zabawy :)

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