Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Odwoływanie się do pól i metod innej klasy

daviiss 20 Lis 2016 13:59 777 4
  • #1 20 Lis 2016 13:59
    daviiss
    Poziom 3  

    Witam, generalnie dopiero zaczynam przygodę z C# i z obiektowym programowaniem, więc proszę o wyrozumiałość :). Wcześniej uczyłem się podstaw strukturalnego C++, teraz przerzuciłem się na C# i uczę się programowania obiektowego. Mój problem polega na tym, że gdy próbuję się odwoływać w jednej klasie do rzeczy, które deklarowałem w innej klasie, to dostaję błąd - 'The name xxx does not exist in the current context'.

    Tutaj kod:

    Plik główny (SystemWalki.cs)

    Kod: csharp
    Zaloguj się, aby zobaczyć kod



    Plik Postac.cs
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Plik Przeciwnicy.cs
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Błąd wywala mi przy deklarowaniu easy.xxx itd.

    Generalnie chcę, aby w pliku Przeciwnicy.cs losowały się wartości, których później chciałbym używać w głównym pliku SystemWalki.cs w Main.

    Tak samo mam pytanie jak wywołać metodę void InternalPrzeciwnicy(); z Przeciwnicy.cs w Main w SystemWalki.cs. W strukturalnym C++ wystarczyło napisać nazwę funkcji, tutaj już to tak nie działa i mam lekki kłopot. Ktoś mógłby nakierować początkującego?

    Moderowany przez dondu:

    SPOILER jest zbędny - usunąłem.

    0 4
  • Pomocny post
    #2 20 Lis 2016 16:07
    marcinj12
    Poziom 40  

    daviiss napisał:
    Błąd wywala mi przy deklarowaniu easy.xxx itd.
    W klasie Przeciwnicy nie jest widoczna zmienna easy. Musiałbyś do niej jakoś tę klasę przekazać, albo przenieść tworzenie jej instancji z klasy SystemWalki do klasy Przeciwnicy.
    Ewentualnie - klasę Przeciwnicy wykorzystać do wygenerowania i zwrócenia klasy Postac, którą wykorzystasz w klasie SystemWalki.
    daviiss napisał:
    Tak samo mam pytanie jak wywołać metodę void InternalPrzeciwnicy(); z Przeciwnicy.cs w Main w SystemWalki.cs
    Np. tak:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    Zauważ, że to Ci nic nie da, bo ta metoda nie zwraca niczego. Zamiast void zastosuj zwracania klasy Postac - jak wspomniałem wcześniej.

    0
  • #3 21 Lis 2016 17:39
    daviiss
    Poziom 3  

    Przeniesienie instancji easy z SystemWalki do Przeciwnicy rozwiązało sprawę, jednak dalej nie wiem jak mogę się odwoływać do zmiennych wygenerowanych z klasy Przeciwnicy do klasy SystemWalki :/. Wywołanie tak jak słusznie napisałeś nic nie dało, gdy wypisuję w konsoli wartości w klasie Przeciwnicy wszystko ładnie mi się przypisuje, gdy próbuję je wywołać w SystemWalki, wszystkie mają wartość 0. Napisałeś żebym użył zwracania klasy Postac. Chodzi ci o to abym każdą zmienną (easy.sila, easy.hp itd.) wrzucił w metodę która będzie je zwracać? Tj:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    i tak po kolei?

    0
  • Pomocny post
    #4 21 Lis 2016 19:00
    marcinj12
    Poziom 40  

    Miałem na myśli coś takiego:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    zakładając, że to konsola.
    Kilka uwag:
    - przyjęło się, że nazwy pól publicznych zaczyna się z dużej litery (klasa: Postac)
    - jeżeli i tak losujesz parametry każdej postaci, zamiast dodatkowej metody możesz to przenieść do konstruktora (j/w).
    - przeniosłem klasę radomizera do osobnej, statycznej klasy - w takiej konfiguracji jak miałeś losowało dwa razy ten sam wynik. Randomizer należy generalnie zainicjować raz, ew. losować w większych odstępach czasu.
    - klasa Przeciwnik wydaje się dziedziczyć po klasie Postac - stąd użyto dziedziczenia.

    0
  • #5 21 Lis 2016 19:21
    daviiss
    Poziom 3  

    Dziękuję za pomoc i za przepisanie mojego kodu :)
    Teraz mniej więcej wszystko rozumiem jak poszczególne części działają

    0