Création objet via type, lister les sous-calsses, try{framework}

Résolu
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 - 6 déc. 2004 à 00:20
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 7 déc. 2004 à 08:12
Bonjour,

Voila mes 3 questions:

1: Au lieu d'un message de crash, si une personne n'a pas le framework et démarre l'appli, peut-elle recevoir "Framework innexistant ... mais necessaire. Téléchargement: < adresse.com >" par exemple plutot ?

2. J'ai une classe "public abstract class transport" et 3 sousclasse (Avion:transport, Auto:transport, Bateau:transport). j'aimerais faire un Type[] des sous classes de transport. Et dsonc, si je programme une classe bidon:transport, elle sera automatiquement dans cette liste a la compilation. How ?

3. Comment déclarer un objet par une variable. Pâr exemple:
Transport trans = CreateTransport( typeof( Avion ) );
..
private Transport CreateTransport( type )
{
 return [je retourne quoi ? :p];
}


Merci !

Eric

13 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 déc. 2004 à 10:57
Visual Studio .NET Bootstrapper

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 déc. 2004 à 22:03
ben je suis loin de tout connaitre lol, c'est un peu vaste le framework quand même

pour la 3eme question tu peux faire qqch de ce genre là :

public abstract class Transport
{
public static Transport CreateTransport(Type typeToCreate)
{
if ( !(typeToCreate.IsSubclassOf(typeof(Transport))) )
throw new ArgumentException("Type non supporté");

return (Transport)typeToCreate.GetConstructor(Type.EmptyTypes).Invoke(null);
}
}

public class Avion : Transport
{
public Avion()
{
/// ...
}
}

public class Auto : Transport
{
public Auto()
{
/// ...
}
}

public class Bateau : Transport
{
public Bateau()
{
/// ...
}
}


Transport transport = Transport.CreateTransport(typeof(Bateau));
Avion avion = (Avion)Transport.CreateTransport(typeof(Avion));


pour la 2eme ... pas compris la question :big)

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 déc. 2004 à 23:14
à la compilation je ne pense pas que ce soit faisable, par contre à l'execution là c'est faisable :

public abstract class Transport
{
public static Type[] GetAvailableTypes()
{
Type transportType = typeof(Transport);
ArrayList liste = new ArrayList();
foreach ( Type type in transportType.Assembly.GetTypes() )
{
if ( type.IsSubclassOf(transportType) )
liste.Add(type);
}

return (Type[])liste.ToArray(typeof(Type));
}

// ...
}


Cocoricoooooooo !!!!
coq
MVP Visual C#
3
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
6 déc. 2004 à 00:21
Create transport sera plutot

CreateTransport( Type type ) {}

:-p
0

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

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 déc. 2004 à 09:09
Bonjour,

Alors, pour la première question, je ne crois pas que ce soit possible.
La seule solution que je connaisse, c'est de faire un package d'installation paramétré pour qu'il installe le framework s'il n'est pas sur la machine.
Le seul désagrément que cela comporte, c'est que ce package d'installation sera alourdi par la taille du framework... Mais sinon cela marche tres bien.

Pour les 2 autres... Je laisse la parole a des gens qui sont susceptibles de dire moins de bétise que je pourrais en die (je suis pas sur du tout de mes reponses)

a++

Mx
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 déc. 2004 à 10:17
Ou alors, tu peux peut-etre tout simplement faire un batch qui vérifie si les dll du framework sont presentes (ou une variable systeme concernant le framework?) . si c'est le cas, l'application se lance, autrement, message prevenant qu'il faut installer .net

a++

Mx
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
6 déc. 2004 à 15:30
Merci.

Et pour les 2 autres questions ? :)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 déc. 2004 à 15:34
ben là comme ça aucune idée lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
6 déc. 2004 à 20:51
Quelquechose que coq ne sait pas ... moi qui croyais sa impossible :p

Je developpais sous RunUO avant (Émulateur Ultima Online en c#).

Il y avait un moyen avec un string de créer l'objet correspondant si existant, un truc de souvenir qui sappelais "CreateInstance". C'était une fonction de l'emul ? du .Net? je m'en rappel pas il faudrait que je la retrouve. Mais ya forcement un moyen.

Pour lister les classes, c'est aussi possible, puisque des desassembnleur ou même la completion de shgarpDev s'en sert.

En gros, je sais que ce n'est pas impossible, mais parcontre comment faire sa je sais pas :p

Enfin, gros merci a celui qui trouvera :p

Eric
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
6 déc. 2004 à 22:28
Tu répond parfaitement a mes attente (encore :) ) pour le 3e cas :p

Le 2e.

En fait, je voudrais quil mer liste les types de touses les classes qui héritent de transport.

si le programme ets comem tu la décris plus haut, À la compilation, dans un Type[] static, il enregistrera:
Avion,
Bateau,
Auto


Comme cela si je rajoute
public class Vélo : Transport
{
public Vélo()
{
/// ...
}
}


À la compilation, dans un Type[] static, il enregistrera:
Avion,
Bateau,
Auto,
Vélo


Je veut donc uen fonction capable de gerer sa :)
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
7 déc. 2004 à 01:11
Voila, je suis sur la bonne piste !

Un gros merci :)
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
7 déc. 2004 à 02:51
Sa fonctionne impect. Grace a sa, j'arrive a produire quelquechose de puissant. Un énorme merci :)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 déc. 2004 à 08:12
de rien :)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous