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

[Résolu]
Signaler
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
Visual Studio .NET Bootstrapper

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
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#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
à 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#
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
Create transport sera plutot

CreateTransport( Type type ) {}

:-p
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
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
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
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
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
Merci.

Et pour les 2 autres questions ? :)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
ben là comme ça aucune idée lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
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
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
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 :)
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
Voila, je suis sur la bonne piste !

Un gros merci :)
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
Sa fonctionne impect. Grace a sa, j'arrive a produire quelquechose de puissant. Un énorme merci :)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
de rien :)

Cocoricoooooooo !!!!
coq
MVP Visual C#