[vb.net]Type abstracte klasse

Pagina: 1
Acties:

  • maurad3r
  • Registratie: Oktober 2004
  • Laatst online: 12-04 13:50
Ik zit met een probleem. Ik heb een abstracte klasse 'sprite': daarvan erven vervolgens 'Auto', 'Persoon' etc.. Nu heb ik een array met daarin allerlei sprites. Hoe kan ik nu kijken voor iedere sprite van welk type hij is (auto, persoon)? Ik gebruik vb.net.

Ik heb het zo geprobeerd, maar dat werkte niet.
Kan iemand me helpen en zeggen hoe het wel moet?

code:
1
2
3
4
5
6
7
8
9
10
Dim sprites(1) As Sprite

sprites(0) = New Persoon
sprites(1) = New Auto

For Each sprite As Sprite in sprites
        if sprite Is Persoon Then
              doe iets
        endif
Next

  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 15-04 08:14
VB.NET doe ik niet zo vaak, want ik hou er niet zo van, maar ging dit niet met TypeOf en Is?

Kijk maar eens op http://msdn.microsoft.com...html/vblrfVBSpec9_2_6.asp

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 14:04
kijk eens naar typeof --> http://www.codeproject.com/dotnet/CheatSheetCastingNET.asp

[ Voor 3% gewijzigd door Daspeed op 05-01-2006 19:14 . Reden: Gr... Net te laat :P ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:20
De kracht van OO zit 'm erin dat je nu eens niet hoeft te checken van welk type een bepaald object is , om iets uit te voeren, afhankelijk van het type v/h object.
(In jouw specifiek geval toch).

Aangezien je auto en je persoon van eenzelfde class overerven, kan je in die abstracte base class een virtual method maken. Die override je dan in je Persoon en Auto class, en in die 'Persoon' of 'Auto' class, ga je de specifieke code gaan stoppen die moet uitgevoerd worden.
Zoek maar eens op virtual methods en polymorphisme.

Bv:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public abstract class Sprite
{
    public abstract void DoeIets();
}

public class Auto : Sprite
{
   public override void DoeIets()
   {
       Console.WriteLine ("Ik ben een auto");
   }
}

public class Persoon : Sprite
{
    public override void DoeIets()
    {
        Console.WriteLine ("Ik ben een persoon");
    }
}


Als je dan deze code hebt:
code:
1
2
3
4
5
6
7
sprites[0] = new Persoon();
sprites[1] = new Auto();

foreach( Sprite s in sprites )
{
    s.DoeIets();
}


Dan zal je het gewenste effect bereiken.

https://fgheysels.github.io/


  • maurad3r
  • Registratie: Oktober 2004
  • Laatst online: 12-04 13:50
whoami schreef op donderdag 05 januari 2006 @ 21:38:
De kracht van OO zit 'm erin dat je nu eens niet hoeft te checken van welk type een bepaald object is , om iets uit te voeren, afhankelijk van het type v/h object.
(In jouw specifiek geval toch).

Aangezien je auto en je persoon van eenzelfde class overerven, kan je in die abstracte base class een virtual method maken. Die override je dan in je Persoon en Auto class, en in die 'Persoon' of 'Auto' class, ga je de specifieke code gaan stoppen die moet uitgevoerd worden.
Zoek maar eens op virtual methods en polymorphisme.

Bv:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public abstract class Sprite
{
    public abstract void DoeIets();
}

public class Auto : Sprite
{
   public override void DoeIets()
   {
       Console.WriteLine ("Ik ben een auto");
   }
}

public class Persoon : Sprite
{
    public override void DoeIets()
    {
        Console.WriteLine ("Ik ben een persoon");
    }
}


Als je dan deze code hebt:
code:
1
2
3
4
5
6
7
sprites[0] = new Persoon();
sprites[1] = new Auto();

foreach( Sprite s in sprites )
{
    s.DoeIets();
}


Dan zal je het gewenste effect bereiken.
Dankjullie allemaal: het werkte!! Ik kon het niet gevonden krijgen omdat ik niet echt wist waar ik op moest zoeken.

Ik wil dit weten omdat ik een andere actie wil ondernemen voor de auto dan voor de persoon!