Collection d'objets multi-types...

Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007 - 1 août 2006 à 18:00
cs_brico07 Messages postés 60 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 16 mai 2012 - 12 avril 2007 à 14:41
Salut tout le monde,

J'ai plusieur objet (ex : Bateau, Avion, Voiture) et je souhaiterai faire une collection d'objets issues de ces classes différentes...
maCollection :
monBateau1
monAvion1
monAvion2
maVoiture1
monBateau2
(...)

Voilà donc comment je peux faire pour enregistrer tout ses objets étant de type différents dans une seule collection pour pouvoir y accéder et savoir quel est la couleur de maVoiture1 par exemple et le nombre de réacteur de monAvion2 ?

Merci d'avance

8 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
1 août 2006 à 18:17
Salut,
Moi ce que je ferais c'est une classe Vehicule, qui contient des enfants (Bateau, Avion, etc), et je stockerais tout ces éléments une collection typée (voire Generics).
Ensuite, si tu veux accéder à un élément globale comme la couleur d'une auto, suffit d'appeler la méthode correspondante de la classe Vehicule car à priori chaque Vehicule peut avoir une couleur (et pas seulement une auto).
Pour des attributs qui seraient dépendant d'un sous-type, comme par exemple la taille d'un pot d'échappement (qu'on ne trouve pas sur un avion ) tu peux faire un test avec le mot clef is :
if(monVehicule is Auto)

VC# forever
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 août 2006 à 18:57
Oui comme Bidou à part que j'aurais dérivé d'une interface IVehicule mais comme dans ton exemple tu veux connaîtres le nombre de réacteurs et qu'une voiture n'a pas de réacteur tu vas te retrouver a faire des casts et des "is, "as" alors tu peux bien tout mettre dans une collection d'objets ( ArrayList ).
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 août 2006 à 18:58
Les puristes diront "implementer une interface et non dériver" quoi que..
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
1 août 2006 à 19:08
Hum, je pensais en faite à une class abstraite Vehicule et de la on pourrait créer des interfaces IMotorisé, IRoule par exemple...

VC# forever
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
1 août 2006 à 22:32
oulà oulà 
Si quelqu'un aurait un exemple se serai super! Parsque les interfaces j'en ai fait une il y a 1 mois mais je ne maitrise pas et je ne comprends pas trop leur intéret...

J'ai pensé à un truc que je suis en train de mettre en place pour voir si ça peut le faire... il sajirai de faire une classe objet "unItem" qui a une propriété objet avion, une objet voiture et une objet bateau et ensuite créer une liste de type "unItem"...
Il suffirai ensuite de trouver la propriété qui n'est pas null pour savoir la nature de l'item..
bon je ne penses pas du tout que se soit très pro et surtout ça instancie beaucoup de propriété pour rien (ici les 2/3 quand même lol)

Je suis très curieux de voir un exemple avec une interface!
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 août 2006 à 01:36
Dans ton cas le plus simple, c'est une collection d'objets ( de type Object ) et les opérateurs is ou as.

ArrayList members = new ArrayList( ); // Collection d'objets.
members.Add( new Bidou( ) );
members.Add( new Lutinore( ) );


if ( members[ 0 ] is Bidou )
    MessageBox.Show( "Salut Bidou" );


if ( members[ 1 ] as Lutinore != null )
    MessageBox.Show( "Salut Lutinore" );


 


Un exemple si tu préfère implementer une interface ou une classe abstraite :

public interface IMember
{
    string Name { get; }
}


public sealed class Bidou : IMember
{
    public string Name { get { return "Bidou"; } }
}


public sealed class Lutinore : IMember
{
    public string Name { get { return "Lutinore"; } }
}


// ..


List< IMember > members = new List< IMember >( ); // Collection générique.
members.Add( new Bidou( ) );
members.Add( new Lutinore( ) );


foreach( IMember member in members )
    MessageBox.Show( member.Name );
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
2 août 2006 à 09:34
Merci bien pour cet exemple je vais méditer là dessus tout de suite
0
cs_brico07 Messages postés 60 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 16 mai 2012 1
12 avril 2007 à 14:41
bonjour,
 je viens de commencer en C#, et je dois écrire un Programme qui me permet de déssiner deux types de rectangles, de sorte que mes premiers rectangle du Types "un", je puisse les introduirent dans le rectangle du type "deux" à une position quelconque sans qu'il y ait superpositions de deux rectangles du type "un". et ils ne doivent pas déborder le rectangle de type "deux".
mersi de m'aider!!!!!!!
0
Rejoignez-nous