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

"obiekt" klasy jako parametr funkcji

Object Storage Arubacloud
0 głosów
2,108 wizyt
pytanie zadane 4 sierpnia 2015 w C# przez Arkam Nowicjusz (170 p.)

Witam.
Mam sobie 2 klasy, monsterka i playera, w kazdej z nich mam wartosc:

public int health;
public int maxHealth;

no i tworze sobie te kreatury i chce zrobic funkcje ktora pobieraich hp czyli:

	public int getHealth()
	{
		return health;
	}

i teoretycznie wszystko dziala i jest ok, ale skoro w obu klasach mam taka sama zmienna to czy nieda sie moze stworzyc funkcji 1 raz np w oddzielnej klasie z funkcjami tak zeby dzialalo to na zasadzie

	public int getHealth(creature)
	{
		return creature.health;
	}

Bo nie bardzo wiem jak moge przekazac te creature do funkcji, tj jako co to okreslic :D 
Tak dla wizualizacji, postac tworze w nastepujacy sposob;

Character Postac = new Character("Arkam", 100, 100, 0, 1,1,1,1,0,-1);

 Wiec tak jak mowilem, problem glownie z przekazaniem tej kreatury, czy id do funkcji. Z gory dziekuje :)

 

 

 

 

3 odpowiedzi

0 głosów
odpowiedź 4 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
wybrane 4 sierpnia 2015 przez Arkam
 
Najlepsza
"Funkcja(Nazwa_klasy creature)" Lepiej użyj dziedziczenia niż osobnej klasy.
komentarz 4 sierpnia 2015 przez Arkam Nowicjusz (170 p.)
edycja 4 sierpnia 2015 przez Arkam

//Muszą być osobne klasy dla postaci i przeciwnika bo w dalszej części ich struktury będą się bardzo różniły.
Dziękuje za pomoc, może być w taki sposób czy powinienem zrobić to inaczej?

 

public class Functions {
	
	public int getHealth(Character creature)
	{
		return creature.health;
	}
	
	public int getHealth(Enemy creature)
	{
		return creature.health;
	}
}


//Przyklad_1
Functions funkcje = new Functions ();
		funkcje.getHealth (Postac);

//Przyklad_2
Functions funkcje = new Functions ();
		funkcje.getHealth(Przeciwnik);

 

Edit. Wykorzystam dziedziczenie, chyba mózg mi się wyłączył przez brak snu. Jeszcze raz dziękuję.
+1 głos
odpowiedź 4 sierpnia 2015 przez Strategiusz Dyskutant (9,220 p.)
edycja 4 sierpnia 2015 przez Strategiusz

W klasycznym podejściu obiektowym możesz metodę getHealth(creature) mieć w jakiejś klasie wyższego poziomu, która ma kreatury jako swoje składowe (na przykład level, mapa, system walki czy gra). Ale w ciele tej metody możesz mieć następnie creature.getHealth(). Oczywiście creature to nadklasa abstrakcyjna dla monstera i playera, ale nie wiem dokładnie jak jest z polimorfizmem w C#.

Generalnie, jeśli powtarza ci się metoda w dwóch klasach, to wypadałoby zrobić dla nich wspólną nadklasę i w niej napisać tę metodę. Ale w grach w praktyce różnie bywa i nie zawsze da się zrobić eleganckie drzewo dziedziczenia. Są bardziej elastyczne metody w różnych językach jak dziedziczenie wielokrotne lub bardziej zalecane interfejsy. Nie pamiętam jak jest w C#.

0 głosów
odpowiedź 4 sierpnia 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Moim zdaniem powinnienieś rozkminić to używając dziedziczenia :)

Podobne pytania

0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 14 kwietnia 2018 w C i C++ przez zibiken Początkujący (310 p.)
+1 głos
1 odpowiedź 5,473 wizyt
pytanie zadane 19 kwietnia 2016 w C# przez timrh Mądrala (6,030 p.)
0 głosów
0 odpowiedzi 162 wizyt

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 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!

...