Przekazywanie obiektów pomiędzy klasami

0

Witam was mam taki problem, mam do napisania program, który ma się składać z trzech klas, jednej do pobierania, drugiej do liczenia i trzeciej do wyświetlania danych. Klasa która liczy ma zawierać właściwości za pomocą których mam ustawiać lub pobierać wartości w klasach do pobierania i wyświetlania. Program wygląda tak:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{

 class Pobieranie
 {
    int x, y;

    Obliczanie o = new Obliczanie();
    
    public void pobierz()
    {
        Console.Write("Podaj stan poczatkowy: ");
        x = int.Parse(Console.ReadLine());
        Console.Write("Podaj stan biezacy: ");
        y = int.Parse(Console.ReadLine());

        o.sb = x;
        o.sp = y;
    }
               
}

class Obliczanie
{
    int stan_poczatkowy, stan_biezacy;

    public int sp
    {
        get{return stan_poczatkowy;}
        set { stan_poczatkowy = value; }
    }
    public int sb
    {
        get { return stan_biezacy; }
        set { stan_biezacy = value; }
    }
    public int oblicz(int stan_poczatkowy, int stan_biezacy)
    {
        return stan_biezacy - stan_poczatkowy;
    }
}

class Wyswietlanie
{
    public void wyswietl()
    {
        
        Console.WriteLine("Stan poczatkowy to : ");
        Console.WriteLine("Stan biezacy to : ");
        Console.WriteLine("Ilosc zuzytej energii to : ");
          
    }
}

class Program
{
    static void Main(string[] args)
    {
      
        Console.ReadKey();

    }
}

}


Problem tkwi w tym że nie potrafię przekazać obiektu klasy Obliczenie do klasy Wyświetlanie ani skorzystać z właściwości get w klasie Wyświetlanie. Z góry dzięki za pomoc i sugestie.
0

nie znam sie ani trochę na C# ale spróbuj dziedziczenie

1

Utwórz prywatne pole typu Obliczanie w klasie Wyswietlanie i przekaż konkretną instancję poprzez parametr w konstruktorze. Nazywa się to wstrzykiwanie zależności przez konstruktor, ale póki co nie musisz sobie tym głowy zaprzątać.

W klasie Pobieranie wyrzuć też tworzenie nowej instancji klasy Obliczanie. Przekaż jej gotową instancję przez konstruktor, którą potem przekażesz do klasy Wyswietlanie. To możesz zrobić w Main.

I jeszcze jedna rzecz: zastanów się w jaki sposób chcesz przekazywać wartości w klasie Obliczanie. Albo przez parametry albo przez właściwości. Teraz w metodzie oblicz jej parametry przykrywają twoje pola i w obliczaniu w ogóle z nich nie korzystasz.

0

Walczyłem z tym trochę dzisiaj i jedyne co mi się udało to utworzyć konstruktor i zamienić metodę na właściwość, którą będę zwracał wynik. Ale w dalszym ciągu nie wiem jak przekazać obiekt za pomocą konstruktora a tym bardziej jak go przekazać do klasy Wyswietlanie. Byłbym wdzięczny za jakiś przykład, jeżeli to możliwe.

Trochę zaktualizowany kod:

using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace ConsoleApplication1
{
class Pobieranie

{
    int x, y;
    Obliczanie Dane;

    public Pobieranie()
    {
        Dane.sp = x;
        Dane.sb = y;
    }
               
    public void pobierz()
    {
        Console.Write("Podaj stan poczatkowy: ");
        x = int.Parse(Console.ReadLine());
        Console.Write("Podaj stan biezacy: ");
        y = int.Parse(Console.ReadLine());

    }
               
}


class Obliczanie
{
    int stan_poczatkowy, stan_biezacy;

    public int sp
    {
        get{return stan_poczatkowy;}
        set { stan_poczatkowy = value; }
    }
    public int sb
    {
        get { return stan_biezacy; }
        set { stan_biezacy = value; }
    }
    public int ob
    {
        get { return stan_biezacy - stan_poczatkowy; }
    }
}

class Wyswietlanie
{
        
    public void wyswietl()
    {            
        Console.WriteLine("Stan poczatkowy to : " );
        Console.WriteLine("Stan biezacy to : " );
        Console.WriteLine("Ilosc zuzytej energii to : ");
           
    }
}

class Program
{
    static void Main(string[] args)
    {
                 
        Console.ReadKey();

    }
}

}

0
class Pobieranie
{
    Obliczanie _obliczanie;

    public Pobieranie(Obliczanie obliczanie)
    {
        _obliczanie = obliczanie;
    }

    public void Pobierz()
    {
        Console.Write("Podaj stan poczatkowy: ");
        _obliczanie.StanPoczatkowy = int.Parse(Console.ReadLine());

        Console.Write("Podaj stan biezacy: ");
        _obliczanie.StanBiezacy = int.Parse(Console.ReadLine());
    }
}

class Wyswietlanie
{
    Obliczanie _obliczanie;

    public Wyswietlanie(Obliczanie obliczanie)
    {
        _obliczanie = obliczanie;
    }

    public void Wyswietl()
    {
        Console.WriteLine("Stan poczatkowy: {0}\nStan biezacy: {1}\nZuzycie: {2}",
            _obliczanie.StanPoczatkowy, _obliczanie.StanBiezacy, _obliczanie.Zuzycie);
    }
}

class Obliczanie
{
    public int StanPoczatkowy { get; set; }
    public int StanBiezacy { get; set; }
    public int Zuzycie { get { return StanBiezacy - StanPoczatkowy; } }
}

class Program
{
    static void Main(string[] args)
    {
        var obliczanie = new Obliczanie();

        var pobieranie = new Pobieranie(obliczanie);
        pobieranie.Pobierz();

        var wyswietlanie = new Wyswietlanie(obliczanie);
        wyswietlanie.Wyswietl();
    }
}
0

Wielkie dzięki za pomoc, już powoli zaczynałem trafiać na dobrą drogę, tylko pojawiły się małe problemy z realizacją. Dokładnie o to mi chodziło.

0

A i jeszcze jedno pytanie, z czystej ciekawości czy można by było napisać go tak żeby korzystać z pól składowych klasy Obliczanie we właściwościach? Próbowałem tak to zrobić wcześniej ale wtedy te pola są zerowane przed domyślny konstruktor tej klasy.

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