Przekazywanie obiektów pomiędzy klasami

Odpowiedz Nowy wątek
2012-03-03 04:23
Sagaton
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.

Pozostało 580 znaków

2012-03-03 06:54
qwe
0

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

skoro nie masz pojęcia o oop to lepiej nic nie mów - byku_guzio 2012-03-03 07:16

Pozostało 580 znaków

2012-03-03 09:35
Rev
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.


edytowany 1x, ostatnio: Rev, 2012-03-03 09:38

Pozostało 580 znaków

2012-03-03 18:41
Sagaton
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();

    }
}

}

Pozostało 580 znaków

2012-03-03 19:23
Rev
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();
    }
}

Pozostało 580 znaków

2012-03-03 20:11
Sagaton
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.

Pozostało 580 znaków

2012-03-03 22:54
Sagaton
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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