Próbuję zrozumieć interfejsy i klasy abstrakcyjne, i nie mogę pojąć ważnego elementu oszczędzania mocy obliczeniowej i pamięci.
abstract class Przedmiot{
public string _nazwa{ get; private set; }
public string _opis{ get; private set; }
public float _cena{ get; private set; }
}
Mam klasę Przedmiot.cs i będą ją dziedziczyły wszystkie przedmioty np.:
class Miecz : Przedmiot{
public int _obrazenia{ get; private set; }
}
class Jablko : Przedmiot{
public int _wartosciOdzywcze{ get; private set; }
}
Pytanie co do "oszczedzania pamięci" - zakładam że mam w ekwipunku 5 jabłek. Każde jabłko jest takie same - ma te same: nazwę, opis i cenę. Zakładam że np. opis zajmuje 100B miejsca. Jako że mam 5 jabłek, więc każde ma ten sam opis, czyli zajmują 500B - wydaje mi się to marnotrawstwem zasobów, ale gdyby zrobić zamiast nazwy, int'a który wskazywałby na ID opisu w jakiejś innej liście zajmowałoby to 20B a nie 500B. Nie mogę jednak pojąć jak sobie z tym poradzić, gubię się. Są to minimalne wartości, ale przy większej skali mogłoby to mieć znaczenie i chciałbym mieć to na uwadze. Dodatkowo nie wiem jak odwołać się do tych klas używając jakiejś metody - np. chcę dodać jabłko do ekwipunku - AddItem( ... ) - co podać w argumencie, skoro chcę to robić automatycznie? Klasę, ale mam ich np. 1000? String'a a potem sprawdzać w if'ie którą klasę dodać, ale co zrobić jak jest 1000+ przedmiotów? Mam problem z tym 'schematem' budowania hierarchii, nie wiem jak to ułożyć...
Ps. Chciałbym poznać jakieś rozwiązanie 'ogólne'. Jak takie coś budować? Jak się zabrać za takie coś? Podałem tylko przykład z przedmiotami, ale zamierzam to wykorzystać do wielu innych rzeczy.
Ps2. Mogę podać najprostszy przykład... Minecraft i jego API (http://takahikokawasaki.github.io/minecraft-resources/javadoc/forge/1.8-11.14.1.1320/net/minecraft/item/package-tree.html):
net.minecraft.item.Item
|- net.minecraft.item.ItemArmor
|- net.minecraft.item.ItemBlock
| |- net.minecraft.item.ItemCloth
| |- net.minecraft.item.ItemLeaves...
|- net.minecraft.item.ItemBed...