Bonjour Madame, Monsieur.
Je voudrais savoir si, en Vb 2010 Express, il est possible de créer une fonction du type
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function Instance(NomClasse As String) As Object
Bonjour Madame, Monsieur.
Je voudrais savoir si, en Vb 2010 Express, il est possible de créer une fonction du type
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function Instance(NomClasse As String) As Object
si c'est pour créer une instance elle existe déjà ^^
si c'est pour du référencement d'instance il te faut un collections.generic.dictionary(of string, object)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Activator.CreateInstance()
Bonjour Pol63.
J'ai rédigé la fonction suivante,
compte tenu de la documentation qui affirme que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Public Function Instance(ByVal NomClasse As String) As Object Dim Obj As Runtime.Remoting.ObjectHandle Obj = CreateInstance(Nothing, NomClasse) Obj.Unwrap() Return Obj.Unwrap() End Function
J'ai appelé cette fonction avec "Capitaine" pour l'argument NomClasse, sachant que mon programme contient une classe ainsi nommée. Il en a résulté le message d'erreurSi assemblyName est référencé Nothing, la recherche s'effectue dans l'assembly en cours d'exécution.
Serait-ce que la procédure CreateInstance ne fonctionne pas pour les classes personnelles ?Impossible de charger le type 'Capitaine' à partir de l'assembly 'Investigation06, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Merci de bien vouloir me répondre.
Bonjour BenoitM.
Je vois mal le lien entre ma question (qui appelle me semble-t-il une réponse par oui ou par non) et votre réponse.
Quoiqu'il en soit, je vous remercie de m'avoir répondu.
Retrouvez moi sur :
Mon Espace Developpez.com------------------------------- Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code---------------------------- Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
Bonjour Nathanael Marchand
J'ai eu le tort de poser ma question de façon négative. Il peut en résulter une ambiguïté. En effet, à strictement parler, votre réponse "non" signifie qu'il est faux de dire que la procédure CreateInstance ne fonctionne pas pour les classes personnelles, et donc qu'il reste un espoir que l'erreur se trouve ailleurs. Si c'était le cas, voudriez-vous me proposer une correction ?
Merci d'avance.
En effet, c'est le cas mais comme dans le message du dessus tu as indiqué que tu voulais qu'un oui ou un non, j'ai respecté la consigne
Plus sérieusement, le nom d'une classe tel que tu en as besoin n'est pas que le nom tel que tu l'as déclaré dans ton code, il y a également le namespace qui entre en jeu. Par exemple, pour la classe String, c'est System.String qu'il faut.
Néanmoins, je suis assez d'accord avec BenoitM. Pourquoi arriver à ce genre de "bidouilles" ? Il existe peut être une solution plus élégante à ton problème?
Retrouvez moi sur :
Mon Espace Developpez.com------------------------------- Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code---------------------------- Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
Merci pour le tuyau. Par ailleurs, je suis d'accord pour dire que cela sent la bidouille. Et en ce qui concerne une solution plus élégante, j'ai commencé à chercher par une autre voie.
Merci de m'avoir répondu.
Retrouvez moi sur :
Mon Espace Developpez.com------------------------------- Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code---------------------------- Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
il n'y a pas de classes personnelles, il y a des classes dans des assemblies
le framework est codé en .net donc toutes les classes étaient à un moment données des classes "personnelles" des développeurs microsoft ^^
il existe par ailleurs des moyens de chercher des classes dans tous les assemblies (enfin de chercher des types)
après au lieu de nous demander comment faire tu ferais mieux de nous dire pourquoi tu veux faire, on pourras alors mieux te répondre ou t'aiguiller vers une solution plus adaptée s'il y en a une ...
Mon problème est de n'en pas avoir. Il ne me reste que des cahiers des charges que je me donne, suffisamment tordus pour qu'ils soient difficiles à traiter. Je suis un ancien de VB6. Retraite venue, j'ai continué à programmer pour m'amuser. Puis, récemment, j'ai appris (à 72 ans) que Visual Basic avait viré sa cuti. J'ai voulu savoir, ce qui de fil en aiguille m'a conduit à télécharger vb 2010 Express, puis de m'abonner à ce forum.
Alors d'une part, j'ai bien le droit d'y poster des questions et même des réponses. Mais d'autre part, j'ai scrupules à mobiliser des experts comme vous uniquement pour satisfaire ma curiosité.
Avec toute ma sympathie.
Très bien. J'admire. C'est si rare.
Or donc, je vous décris dans les grandes lignes le cahier des charges bizarroïde sur lequel je joue en ce moment.
D'abord l'entrée en matière. J'ai rédigé un programme structuré hiérarchiquement, grâce à cinq classes que j'ai nommées selon le vocabulaire militaire, puisqu'il s'agit de hiérarchie
Cela permet de construire un objet1) Une classe Capitaine possédant quelques propriétés de types simples, mais surtout une propriété de type Adjudants.
2) Une classe Adjudants représentant une collection d'objets de classe Adjudant.
3) Une classe Adjudant possédant quelques propriétés de types simples, mais surtout une propriété de type Bidasses.
4) Une classe Bidasses représentant une collection d'objets de classe Bidasse.
5) Une classe Bidasse possédant quelques propriétés de types simples.
qu'il s'agit de savoir sauvegarder et recharger.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Cap As Capitaine
C'est ici que l'aspect bizarroïde apparaît. Je cherche à sauvegarder Cap non pas par sérialisation, mais par un nouveau procédé que je nomme "textualisation", avec une pointe d'ironie. Il s'agit de produire un fichier texte, qui décrit explicitement toute la structure hiérarchique dont Cap est la tête, en utilisant pour cela des indentations, comme dans l'explorateur de Windows. Ce n'est pas très difficile. J'ai mis dans chaque classe une procédure
dans laquelle n est le niveau d'indentation, et qui pour toute classe autre que Bidasse appelle la fonction Textualisé du niveau hiérarchique inférieur. Cela fait en sorte que le String mettre dans le fichier est
Code : Sélectionner tout - Visualiser dans une fenêtre à part Public Function Textualisé(ByVal n As Integer) As String
Il me reste maintenant à "détextualiser" le contenu du fichier. Vous comprenez alors mon intérêt pour un éventuelle procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part Cap.Textualisé
Mais on doit pouvoir s'en passer. Toute suggestion autre qu'une modification du cahier des charges sera la bienvenue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function Instance(ByVal NomClasse As String) As Object
Cordialement.
En effet, je n'aurai pas fonctionné comme ceci. Dejà, je ne vois pas trop l'interet de faire les 5 classes. Une suffit avec une propriété qui indique le grade (mais bon, selon les besoins, la modelisation peut changer). Ensuite, inutile de créer des classes Adjudants et Bidasses, il existe des conteneurs génériques comme un List(of Adjudant) qui permet de stocker une liste d'objets Adjudant. Enfin, pour la sérialisation, .Net permet "out of the box" la sérialisation binaire, XML et JSON. C'est dommage de s'en passer
Retrouvez moi sur :
Mon Espace Developpez.com------------------------------- Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code---------------------------- Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
Pour l'instant je ferai Nathanael Marchand
Une classe Soldat avec un Enum Grade qui peut prendre les différentes valeur
Apres si tu as besoin de comportement plus spécifique faire une classe dérivé de Soldat (exemple général) et tu ajoutes un check sur l'initiation de la propriété Grade
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
Désolé.
J'ai été très bête de poser la question initiale comme si je demandais une fonction universelle
alors qu'une fonction spécifique à un programme me suffit. Dans le cas de l'exemple que je traite, je peux donc me borner à écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function Instance(ByVal NomClasse As String) As Object
Mes excuses à tous pour m'avoir fait perdre votre temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Public Function Instance(ByVal NomClasse As String) As Object Dim Obj As Object Select Case NomClasse Case "Bidasse" : Obj = New Bidasse Case "Bidasses" : Obj = New Bidasses Case "Adjudant" : Obj = New Adjudant Case "Adjudants" : Obj = New Adjudant Case "Capitaine" : Obj = New Capitaine Case Else End Select Return Obj End Function
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager