Forcer la compilation

Résolu
Signaler
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour



Est- il possible de forcer la compilation a accepter le code sachant que
lorsqu'il s'exécutera il sera bon. Je m'explique via un exemple



je possède 3 fenêtres wTest1 et wTest2 avec chacune le membre
"iwTips" et une fenêtre wTips



le constructor de la fenetre wTips est comme suit:



public wTips(System.Windows.Forms.Form
awParent)

{


iwParent = awParent;

awParent.iwTips =
this; <==== c'est cette ligne que je voudrais forcer a la
compilation

InitializeComponent();

}



sachant que la fenêtre wTips ne sera exécuté que par wTest1 ou wTest2



Remarque: dans ce cas présent il serait possible de faire ((wTest1)
awParent).iwTips ou idem avec wTest2 mais ce n'est pas ce que je recherche. C'est
réellement de forcer la compilation.











<!--[if !supportLineBreakNewLine]-->

<!--[endif]-->

8 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Si tu veux vraiment échapper au cast et à l'interface je te propose ça :

public wTips(System.Windows.Forms.Form awParent)
{
iwParent = awParent;


// awParent.iwTips = this;
PropertyInfo prop = awParent.GetType().GetProperty("iwTips");
if ( prop != null )
{
// si la propriété existe, on affecte
prop.SetValue(awParent, this, null);
}


InitializeComponent();
}
...

Mais je pense que tu vas preferer la définition d'une interface comme le propose seb, c'est beaucoup plus logique.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
bah nan... ce n'est pas possible... puisque la classe Form ne possède pas de propriété iwTips !

Sébastien FERRAND
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Je comprend tas reponse qui est logique a premiere vue. Mais est ce que
tu comprend que lors de l'execution l'appli ne va pas planter car
wTest1 et wTest2 possede la propriete iwTips.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
oui... mais je crois que tu n'as pas bien compris les principes de la POO...

l'objet que tu manipules là n'est pas un wTest1 ou un wTest2... mais un Form... et donc Form n'a pas de propriété iwTips.

donc, la solution c'est ca :

public wTips(System.Windows.Forms.Form awParent)
{
iwParent = awParent;
if (awParent is wTest1) {
((wTest1)awParent).iwTips = this;
}
if (awParent is wTest2) {
((wTest2)awParent).iwTips = this;
}
InitializeComponent();
}

Mais le plus propre sera d'avoir une interface commune avec toutes les propriétés, méthodes et autres évènements que tu veux utiliser... et ensuite tu les impléments dans tes formulaires.

Sébastien FERRAND
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Coq tu as tres bien compris le principe de ce que je cherche mais le problem c'est que tas methode ne fonctionne pas. En effet, dans ton exemple prop reste toujours null meme lorsque awParent provient de wTest1???
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
La propriété (ou parle bien d'une propriété ?) iwTips est définie dans les classes wTest1 et wTest2 ou dans une classe dont elles héritent ?
Quel est leur niveau d'accessibilité ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
public wTest1.wTips iwTips


Membre de Test1.wTest1
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Donc quand tu passes une instance de wTest1 ça devrait réussir à localiser la propriété iwTips.
Je ne vois pas pourquoi ça ne passe pas.

Mais regarde plutot du coté de la définition d'une interface, ça correspond très bien a ce que tu veux faire, et ça sera plus simple et plus performant.

Cocoricoooooooo !!!!
coq
MVP Visual C#