begin process at 2010 02 09 20:43:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

Constructeur "intelligent"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Constructeur "intelligent"

mardi 7 septembre 2004 à 17:45:53 | Constructeur "intelligent"

revlis

Bonjour

J'ai des class hérité de userControl et je voudrait passer les composant a une class qui les initilise et construit si besoin
pour cela j'ai fait :

public class toto:System.Window.Form.UserControl
{
....
}
public class titi:System.Window.Form.UserControl
{
...
}

public class ma_class
{
private titi val_titi;
private toto val_toto;

private ??? iniComosant(System.Window.Form.UserControl val)
{
if(val == null)
val = new ??????;
return val;
}
}

en gros, je voudrait que la fonction iniComposant reconnaisse le type de "val" et le construise avec son type d'origine...

je sais pas si je suis très clair...
mardi 7 septembre 2004 à 18:36:45 | Re : Constructeur "intelligent"

coq

Administrateur CodeS-SourceS


private void iniComosant(System.Window.Form.UserControl val)
{
if(val == null)
{
if ( val.GetType() == typeof(titi)
val = new titi(...);
if ( val.GetType() == typeof(toto)
val = new toto(...);
}
}


syntaxe exacte non garantie : je n'ai pas d'ide sous la main lol


Cocoricoooooooo !!!!
mardi 7 septembre 2004 à 18:39:03 | Re : Constructeur "intelligent"

revlis

arfff vi... mais dans mon cas, toto et titi son entouré d'une bonne vingtaine de copains.. :(...
mardi 7 septembre 2004 à 18:40:45 | Re : Constructeur "intelligent"

coq

Administrateur CodeS-SourceS
avec les parantheses ça ira deja mieux :

private void iniComosant(System.Window.Form.UserControl val)
{
if(val == null)
{
if ( val.GetType() == typeof(titi) )
val = new titi(...);
if ( val.GetType() == typeof(toto) )
val = new toto(...);
}
}



Cocoricoooooooo !!!!
mardi 7 septembre 2004 à 18:41:58 | Re : Constructeur "intelligent"

coq

Administrateur CodeS-SourceS
ba dsl je ne vois pas d'autre solution dans l'immédiat


Cocoricoooooooo !!!!
mardi 7 septembre 2004 à 18:49:56 | Re : Constructeur "intelligent"

revlis

merci quand meme bonne soirée
mardi 7 septembre 2004 à 19:28:52 | Re : Constructeur "intelligent"

jesusonline

Membre Club Administrateur CodeS-SourceS
qd je vois ton problème je pense à une interface ...

j'ai pas le temps tout de suite, mais ca peut, peut etre vous donné une idée, si tu vois pas ce a quoi je pense, je vais m'expliquer un peu plus ;)

@+


Cyril
mardi 7 septembre 2004 à 20:18:05 | Re : Constructeur "intelligent"

coq

Administrateur CodeS-SourceS
oui de toute façon il faudras certainement une interface, mon exemple au dessus ne tiens pas du tout la route


Cocoricoooooooo !!!!
mardi 7 septembre 2004 à 23:47:19 | Re : Constructeur "intelligent"

jesusonline

Membre Club Administrateur CodeS-SourceS
ca fait une demi heure que j'y tourne autour je vois rien qui se dessine ....

J'ai essayé avec une interface, j'arrive à rien, je crois qu'il va falloir faire un peu de reflexion, mais je connais pas du tout ca.


mon idée en gros

Titi, Toto et ses amis héritent de MyUserControl qui lui meme hérite de UserControl

(je viens de me rendre compte que ce que je pensais n'est encore pas bon, mais je continue qd meme)

apres avec la reflexion, on fait un tableau de tout les types qui héritent de MyUserControl (Càd Titi, Toto et ses amis)
apres on bouclait sur le tableau de Type, on compare le type de val et du type de la boucle en cours

Le problème etait pour retourner le paramètre, mais en ecrivant au dessus je crois avoir trouvé une solution.
J'ecris ce que je pense avec mon langage materner c'est à dire VB :

public function iniComosant(ByRef val as System.Window.Form.UserControl ) as Type

'Tableau de Type enfant de MyUserControl
dim MyUCType() as Type
myUCType = System.Reflexion.GetChildrensArrayTypeOf("MyUserControl")

'Je connais pas la reflexion c'est ici que se trouve la difficulté


for each T as Type in MyUCType
if T.equals(val.gettype()) then
val = new [System.Reflexion(T)]
return T
exit for
end if
next

end function

Je sais pas si j'ai été clair, je sais pas non plus si j'ai été possible, mais je passe val par reference, comme ca apres on pourra le recuperer, et la function retourne son type.


Je sais pas si avec la reflexion ca ca etre possible. En tout cas j'aimerais bien avoir un peu de temps, mais je vais pas en avoir d'ici un mois, je profite des mes derniers jours de libre [:'(]


par contre j'ai une question pour coq sur la mini source au dessus. c'est koi la difference entre GetType et TypeOF, TypeOf existe aussi en VB ? j'ai jamais fait de la reflexion, ni meme touché au type donc j'y connais rien, mais j'aimerais bien pouvoir avoir le temps.


Moi je pars dans la reflexion, mais il existe peut etre une autre solution.

@+

Cyril
mercredi 8 septembre 2004 à 01:48:53 | Re : Constructeur "intelligent"

bigflo

Yop all !

Je lis le topic depuis le debut, mais ya une chose qui ne marchera pas (je pense). Dans les exemples donnés, on se base sur le type. Ok mais si val == null, alors on ne peut avoir son type...ou alors j'ai trop mal compris...
Bon sinon je propose tout de meme un debut de proposition.
Elle est a base de Framework 2.0 et generics...

Voici la classe qui va tester et instancier si il faut:
public class Test
{
public T IniComposant<T>(T item ) where T: new()
{
// Test valable uniquement avec des types références.
if (item == null)
{
//MessageBox.Show(item.GetType().ToString());
item = new T();
}
return item;
}
}

Pour tester, voila le Main:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
UserControl1 uc1 = null;
UserControl2 uc2 = null;

Test test = new Test();
uc1 = test.IniComposant(uc1);
MessageBox.Show(uc1.ClientSize.ToString());

}
}


Avec cette exemple, on a bien uc1 qui vaut null au départ.
Mais la messagebox affiche bien une taille valide ;)

Mission accomplie... javascript:AjoutSmiley('');


--
hu ? cOoL

1 2 3

Cette discussion est classée dans : public, class, usercontrol, toto, val


Répondre à ce message

Sujets en rapport avec ce message

pb avec une class en c# [ par JCpp ] Je ne comprends pas pourquoi quand je change Toto.toto=0; par Toto.toto=1; dans Form2.cs, le programme n'exécute pasrichTextBox1.AppendText("Form 3"+T retourner une structure [ par bip98 ] J'ai trouve un lien qui en parle... mais il me semble pas très juste:http://www.csharpfr.com/forum.v2.aspx?ID=189261Voilà mon cas: public struct struc Passer un objet à une autre class [ par fredspv ] Bonjour,J'ai un WinForm et un usercontrolle WinForm instance usercontrol et le met dans un Panel.Comment faire pour passer le usercontrol instancié à Modifier une textbox dans une class [ par yanis7518 ] Salut a tousvoila je voudrai savoir si il est possible de modifier la valeur d'une textbox à partir d'une fonction appartenant a une class. Et si oui [.NET2] acceder a une fonction de Form1 dans une autre classe [ par ChamY ] Bonjour,J'ai une question toute bete je pense, mais qui me pose un ptit probleme.Je dispose d'une forme avec ca class (class form1), j ai egalement un Je trouve tjs pas de solution pour mon blem "A l'aide" [ par hred1 ] Bon j'explique tout:J'ai le même namespace par toutje suis dans la class 1 (class fraim ok)et je cherche à appler  methode() qui de trouve dans class Problème POO et héritage [ par fregolo52 ] bonjour,Le novice en POOa besoin d'aide voici mon code :public class Device{  public void Update();}public class Camera : Device{   public voi equivalent d'un pointeur C sur une class ou structure [ par sephiro ] BonjourJe débute en C# (3 jours), je developpe en C (Win32) depuis pas mal de temps, je dois réaliser une appli en C# qui appelle mes ActiveX (faite e Dérivation de classe abstraite [ par yoh_777 ] Je voudrais simplement dériver une classe abstraite ayant un constructeur comportant un paramètre.  Voici mon programme  <div style="border: 1pt d Modularité & Sérialisation XML [ par Julien237 ] Bonjour,J'ai une application utilisant une architecture de classes du style :[XmlInclude(typeof(MyClassA)), XmlInclude(typeof(MyClassB))]public class


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,246 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales