Re: Is it possible to store different subclasses in one array?
On Monday, 13 April 2020 at 05:54:52 UTC, evilrat wrote: if (auto weapon = cast(Weapon) gi) weapon.Attack(); Does the parlor (currently illegal in Dlang) if (Weapon w := gi) w.Attack(); look nicer or even (currently legal): if (Weapon w ._= gi) w.Attack();
Re: Is it possible to store different subclasses in one array?
On Monday, 13 April 2020 at 05:54:52 UTC, evilrat wrote: On Monday, 13 April 2020 at 04:21:48 UTC, Leonardo wrote: foreach (ref gi; GameItems) { if (gi == Weapon) gi.Attack() } How would it be? Replying myself... weapon = cast(Weapon) gi; if (weapon !is null) weapon.Attack() can be simplified as: if (auto weapon = cast(Weapon) gi) weapon.Attack(); Even better. Thanks folks!
Re: Is it possible to store different subclasses in one array?
On Monday, 13 April 2020 at 04:21:48 UTC, Leonardo wrote: foreach (ref gi; GameItems) { if (gi == Weapon) gi.Attack() } How would it be? Replying myself... weapon = cast(Weapon) gi; if (weapon !is null) weapon.Attack() can be simplified as: if (auto weapon = cast(Weapon) gi) weapon.Attack();
Re: Is it possible to store different subclasses in one array?
On Monday, 13 April 2020 at 04:15:04 UTC, Leonardo wrote: On Monday, 13 April 2020 at 01:47:11 UTC, Adam D. Ruppe wrote: On Monday, 13 April 2020 at 01:42:51 UTC, Leonardo wrote: Is it possible to store different subclasses in one array? In C#, we have this example, but how I do that in D? Did you try BaseItem[] GameItems; GameItems ~= new Weapon(); yet? Oh, thanks, this works. Now it seems obvious. But fitting another question, this case is only representative, if I want to use one method present in only one of these classes like this: foreach (ref gi; GameItems) { if (gi == Weapon) gi.Attack() } How would it be? Replying myself... weapon = cast(Weapon) gi; if (weapon !is null) weapon.Attack()
Re: Is it possible to store different subclasses in one array?
On Monday, 13 April 2020 at 01:47:11 UTC, Adam D. Ruppe wrote: On Monday, 13 April 2020 at 01:42:51 UTC, Leonardo wrote: Is it possible to store different subclasses in one array? In C#, we have this example, but how I do that in D? Did you try BaseItem[] GameItems; GameItems ~= new Weapon(); yet? Oh, thanks, this works. Now it seems obvious. But fitting another question, this case is only representative, if I want to use one method present in only one of these classes like this: foreach (ref gi; GameItems) { if (gi == Weapon) gi.Attack() } How would it be?
Re: Is it possible to store different subclasses in one array?
On Monday, 13 April 2020 at 01:42:51 UTC, Leonardo wrote: Is it possible to store different subclasses in one array? In C#, we have this example, but how I do that in D? Did you try BaseItem[] GameItems; GameItems ~= new Weapon(); yet?
Is it possible to store different subclasses in one array?
Is it possible to store different subclasses in one array? In C#, we have this example, but how I do that in D? public class BaseItem{ public string name = ""; } public class Weapon : BaseItem{ public int damage = 10; } public class Potion : BaseItem{ public int hpRestore = 50; } var GameItems = new List(); GameItems.Add(new Weapon()); GameItems.Add(new Potion());