Wątek zablokowany 2015-06-29 23:52 przez furious programming.

Przekazywanie zmiennych pomiędzy klasami

2015-01-05 12:23
0

Witajcie,
postanowiłem zacząć uczyć się języka C# ale mam problem z jednym zagadnieniem. Otóż mam klasę z kilkoma zmiennymi i drugą klasę w której zmienne z pierwszej chce wykorzystać. Chce, aby wartości tych zmiennych były tam zmieniane, tak aby klasa 1 operowała potem na nowych wartościach. Jak to zrobić?
Tworzę obiekt 1 klasy w klasie 2 ale wtedy kompilator zgłasza błędy bo jakaś zmiennaX nie istnieje w kontekście 2 klasy.
Prosiłbym aby ktoś wyjaśnił mi to prostym językiem.
Pozdrawiam i z góry dziękuję

Nie używaj prefiksów/postfiksów w tytułach wątków - od podawania nazwy języka/technologii są tagi; - furious programming 2015-01-05 12:31

Pozostało 580 znaków

2015-01-05 12:29
0

Kiedy tworzysz zmienną zmienną w klasie 1, to musisz napisać coś takiego:

public int zmienna = 0;

zamiast

int zmienna = 0;

Wtedy możesz w klasie 2 zrobić coś takiego:

klasa1.zmienna = 3;

Kiedy nie używasz słowa public, to zmienna jest domyślnie traktowana przez kompilator jako prywatna i nie można się do niej odwołać z klasy 2.

edytowany 4x, ostatnio: cPlusPlus, 2015-01-05 12:31

Pozostało 580 znaków

2015-01-05 12:30
Złoty Lew
0

Możesz wrzucić fragment kodu?

Pozostało 580 znaków

2015-01-05 12:49
0

A jak wygląda sposób na uzyskane tego samego efektu, ale bez modyfikatora public? Musimy się przecież starać aby nasz kod był maksymalnie niepubliczny

Pozostało 580 znaków

2015-01-05 14:04
0

W klasie1 tworzysz publiczne metody operujące na tych zmiennych (chyba o pola Ci chodzi w tym momencie?). Obiekt klasy1 przekazujesz w konstruktorze do klasy2 i zapisujesz go w polu klasy2. W metodach klasy2 możesz teraz wywoływać metody klasy1, dzięki czemu możesz zmieniać interesujące Cię wartości, a klasa1 będzie dalej operować na zmienionych.


"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

2015-01-05 14:28
0

Tak, z tego co wyczytałem rzeczywiście chodzi mi o pola;-)

somekind napisał(a):

Obiekt klasy1 przekazujesz w konstruktorze do klasy2 i zapisujesz go w polu klasy2.

Czy mógłbyś mi to jaśniej przekazać? Może pokazać kawałek jakiegoś kodu. Byłbym bardzo wdzięczny.

Pozostało 580 znaków

2015-01-05 14:48
0
Klasa2
{
    Klasa1 klasa1;

    public Klasa2(Klasa1 klasa1)
    {
        this.klasa1 = klasa1;
    }
}

I teraz w kodzie Klasa1:

var k2 = new Klasa2(this);

"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

2015-01-05 16:55
0

   class Program
    {
        public int zmienna = 5;
        public int liczba = 6;

        static void Main(string[] args)
        {
            Program klasa1 = new Program();
            klasa1.Wyswietl();
        }

        void Wyswietl()
        {
            var k2 = new Obliczenia(this);
            k2.WykonajObliczenia();
            if (zmienna == 6) Console.WriteLine("zmienna == 6");
            if (liczba == 7) Console.WriteLine("liczba == 7");

            var InObl = new InneObliczenia(this);
            InObl.NoweObliczenia2();
            Console.WriteLine(liczba);
            Console.ReadKey();
        }
    }

    class Obliczenia
    {
        public int tempLiczba = 1;
        Program programik;
        public Obliczenia(Program programik)
        {
            this.programik = programik;
        }

        public void WykonajObliczenia()
        {
            programik.zmienna = 5  + 1;
            var InO = new InneObliczenia(this);
            InO.NoweObliczenia();
            programik.liczba = tempLiczba;
        }
    }

    class InneObliczenia
    {
        Obliczenia obliczenia;
        public InneObliczenia(Obliczenia obliczenia)
        {
            this.obliczenia = obliczenia;
        }
        Program programik;
        public InneObliczenia (Program programik)
        {
            this.programik = programik;
        }
        public void NoweObliczenia()
        {
            obliczenia.tempLiczba = obliczenia.tempLiczba + 6 ;
        }
        public void NoweObliczenia2()
        {
            programik.liczba += 10;
        }
    }

Na podstawie wskazówek zbudowałem coś takiego. Wynik mnie satysfakcjonuje otrzymałem to co chciałem czyli w kolejnych liniach
zmienna == 6
zmienna == 7
17
Czy to co napisałem jest poprawne? Chodzi mi głównie o ostatnią klasę. Metody w niej zawarte wywołuje zarówno z klasy Obliczenia jak i Program. Dlatego umieściłem tam 2 kostruktory. Czy zrobiłem to poprawnie?

Pozostało 580 znaków

2015-01-05 17:01
0

Pomogłoby gdybyś podał treść zadania, bo jak dla mnie cały program nie ma sensu.

Pozostało 580 znaków

2015-01-05 17:12
0

nie ma treści zadania. Tworze program aby się zrozumieć to.
Założyłem, że w klasie Program będę miał jakieś pola. Następnie wywołam metody z innych klas które będą operować na polach klasy Program. w taki sposób, że będą zmieniać ich wartość.

Pozostało 580 znaków

2015-01-05 17:31
0

Generalnie to zmienna i liczba w Program to powinny być właściwości, a nie publiczne pola, zaś InneObliczenia powinna zostać rozbita na dwie klasy.

A tak w ogóle, to w tym przypadku żadnych konstruktorów nie powinno być, wystarczy jedna klasa z trzema statycznymi metodami.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
Rozumiem, że chodzi ci o to, że nie potrzebuje tych klas ze względu na to, że "niewiele tam się dzieje" ? A gdybym miał znacznie większą ilość metod? I gdyby metody w metodach wykonywane byłoby sporo obliczeń wtedy uzasadnione jest rozbicie na klasy jak w moim kodzie? - moriss 2015-01-05 17:40
Na temat wątku piszemy w postach. Komentarze służą do dyskusji nie na temat. - somekind 2015-01-05 18:00

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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