Om het gelijk beter uit te leggen. Ik wil van de ene subclasse naar de andere subclass. Aangezien het niet realiseerbaar is zoals ik het wil en ik nog niet alle kennis van de taal heb, vermoed ik dat het ligt aan hoe de subclass gemaakt zijn. Het ligt vast welke subclasse naar een andere subclasse verwijst. In dit geval TileF veranderd altijd in een TileE.
Stel ik heb de volgende code:
Nu wil ik tile in een andere subclass veranderen.
Ik heb dit geprobeerd op te lossen door Activator.CreateInstance(tile.NextType()), maar dan krijg ik een object eruit, die ik voor geen mogelijkheid kan veranderen in de type in tile.NextType().
Ook lukt het me met een grote if statement, maar dat lijkt me ook niet de optie. Dit omdat er een stuk of 12 classes er zijn, en je zou toch iets makkelijkers verwachten.
Stel ik heb de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| abstract class Tile{ public abstract int Number{ get; } public Vector2 Position {get;set;} public abstract void Exit() } class TileF : Tile{ public override int Number { get { return 1; } } } class TileE : Tile{ public override int Number { get { return 2; } } } |
Nu wil ik tile in een andere subclass veranderen.
C#:
1
2
3
4
5
6
| class Main{ Tile tile = new TileF; //change tile to TileE tile = tile.ToNextTileType(); } |
Ik heb dit geprobeerd op te lossen door Activator.CreateInstance(tile.NextType()), maar dan krijg ik een object eruit, die ik voor geen mogelijkheid kan veranderen in de type in tile.NextType().
Ook lukt het me met een grote if statement, maar dat lijkt me ook niet de optie. Dit omdat er een stuk of 12 classes er zijn, en je zou toch iets makkelijkers verwachten.
C#:
1
2
3
4
5
6
7
| if tile is TileF //in de constructor de tile meegeven om de propertys zoals Positie mee te geven tile = new TileE(tile) if tile is TileE tile = new TileD(tile) if tile is TileD tile = new TileC(tile) |