Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
April 13, 2020 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<BaseItem>(); GameItems.Add(new Weapon()); GameItems.Add(new Potion()); |
April 13, 2020 Re: Is it possible to store different subclasses in one array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leonardo | 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?
|
April 13, 2020 Re: Is it possible to store different subclasses in one array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | 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?
|
April 13, 2020 Re: Is it possible to store different subclasses in one array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leonardo | 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()
|
April 13, 2020 Re: Is it possible to store different subclasses in one array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leonardo | 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();
|
April 13, 2020 Re: Is it possible to store different subclasses in one array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to evilrat | 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!
|
April 14, 2020 Re: Is it possible to store different subclasses in one array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to evilrat | 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();
|
Copyright © 1999-2021 by the D Language Foundation