• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak pozwolić jakiejś klasie na operacje na prywatnych danych innej klasy? - C#

Object Storage Arubacloud
0 głosów
461 wizyt
pytanie zadane 12 sierpnia 2017 w C# przez Adam Olesiak Gaduła (3,290 p.)

Mam kilka klas - pojemników, które zawierają dane i ewentualnie jakieś metody pomocnicze, które jednak nie zmieniają niczego w danych danego obiektu, np:

public bool CanAfford(Player currentPlayer)
    {
        if (manaCost <= currentPlayer.Mana
            && strReq <= currentPlayer.Strength
            && magReq <= currentPlayer.Magic
            && comReq <= currentPlayer.Command)
            return true;
        return false;
    }

Do tego mam jedną klasę, która ma dostęp do prawie wszystkich obiektów w programie i może zmieniać ich dane. Czy da się zrobić jakoś, aby ta konkretna klasa miała dostęp do pól innych klas, mimo że te nie są dostępne nigdzie indziej?

1
komentarz 12 sierpnia 2017 przez NowyUrzydgownig Mądrala (5,090 p.)
Poczytaj o mechanizmie refleksji w C#.Jeżeli nie możesz edytować jakiejś klasy i musisz uzyskać dostęp do jej pól w czasie działania programu to użyj go.

1 odpowiedź

0 głosów
odpowiedź 12 sierpnia 2017 przez obl Maniak (51,280 p.)

A dlaczego nie zrobisz metody canAfford wewnątrz klasy Player tak, żeby ta metoda przyjmowała jako argumenty: manaCost; strReq; magReq i comReq zwracając false gdy warunek spełniony a true gdy nie.

Dostęp do zmiennych prywatnych powinien być kontrolowany przez zastosowanie właściwości.

        class Player
        {
            int mana;

            public int Mana
            {
                get { return mana; }
                set { mana = value; }
            }
            int strength;

            public int Strength
            {
                get { return strength; }
                set { strength = value; }
            }
            int magic;

            public int Magic
            {
                get { return magic; }
                set { magic = value; }
            }
            int command;

            public int Command
            {
                get { return command; }
                set { command = value; }
            }

            
        }

 

1
komentarz 12 sierpnia 2017 przez adrian17 Ekspert (344,860 p.)
edycja 13 sierpnia 2017 przez adrian17
(proponuję zamienić ręcznie napisane własności na automatyczne)

Podobne pytania

0 głosów
2 odpowiedzi 678 wizyt
0 głosów
1 odpowiedź 729 wizyt
+1 głos
1 odpowiedź 180 wizyt
pytanie zadane 24 czerwca 2016 w C# przez programer Obywatel (1,190 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...