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

Przekazywanie zmiennych pomiędzy klasami

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ę

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.

0

Możesz wrzucić fragment kodu?

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

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.

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.

0
Klasa2
{
    Klasa1 klasa1;

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

I teraz w kodzie Klasa1:

var k2 = new Klasa2(this);
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?

0

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

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ść.

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