[C# 2.0] [Architecture] Héritage Int/Float [Résolu]

Messages postés
728
Date d'inscription
mardi 22 avril 2003
Dernière intervention
19 janvier 2017
- - Dernière réponse : scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Dernière intervention
19 janvier 2017
- 27 avril 2010 à 18:00
Glop, glop,

je profite d'un peu de temps pour reprendre le codage et contrairement au vélo, on oublie vite :/

J'ai une classe de base SensorValueThreshold.
De cette dernière, j'ai dérivé 2 classes : SensorFloat et SensorInt

Cela donne une implémentation de ce type :
public abstract class SensorValueThreshold
    {
        private object m_WarningThreshold;
        private object m_ErrorThreshold;
        private object m_Min;
        private object m_Max;

        public SensorValueThreshold()
        {            
        }

        #region Properties
        public object WarningThreshold
        {
            get { return m_WarningThreshold; }
            set { m_WarningThreshold = value; }
        }
        public object ErrorThreshold
        {
            get { return m_ErrorThreshold; }
            set { m_ErrorThreshold = value; }
        }
        public object Min
        {
            get { return m_Min; }
            set { m_Min = value; }
        }
        public object Max
        {
            get { return m_Max; }
            set { m_Max = value; }
        }
        #endregion
    }


Le problème c'est que si on initialise la classé dérivée (SensorFloat) avec un code :
SensorFloat f;
f.Min = 40;
le type de m_Min sera (int) et non pas (float).
Et dans le code plus loin, on se tape des exceptions puisque les types ne correspondent pas.

Une idée de comment corriger ça ?

Merci.
Vince
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
111
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
27 avril 2010
3
Merci
Comme l'a dit GG29 il te faudrait passer par les génériques.

Ta classe de base deviendrait donc :

public abstract class SensorValueThreshold<T>
    {
        private T m_WarningThreshold;
        private T m_ErrorThreshold;
        private T m_Min;
        private T m_Max;

        public SensorValueThreshold()
        {            
        }

        #region Properties
        public T WarningThreshold
        {
            get { return m_WarningThreshold; }
            set { m_WarningThreshold = value; }
        }
        public T ErrorThreshold
        {
            get { return m_ErrorThreshold; }
            set { m_ErrorThreshold = value; }
        }
        public T Min
        {
            get { return m_Min; }
            set { m_Min = value; }
        }
        public T Max
        {
            get { return m_Max; }
            set { m_Max = value; }
        }
        #endregion
    }



Et tes classes dérivées :

public class SensorFloat : SensorValueThreshold<float>
{
...
}


Ainsi quand tu accederas a tes propriétés elles seront toujours typées int ou float enfin suivant le type de ton dérivé ^^

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_kurky
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
7
0
Merci
Peut-être que les génériques pourront t'aider.


---
mon blog
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Commenter la réponse de cs_GG29
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
36
0
Merci
Salut,

object f = 10.0f;
MessageBox.Show( "f is float : " + ( f is float ) );
object d = ( double )10;
MessageBox.Show( "d is double : " + ( d is double ) );
Commenter la réponse de Lutinore
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Dernière intervention
19 janvier 2017
0
Merci
@GG29 : oui c'est ce que je me suis dit après. J'ai trop absué de .NET 1 pour avoir le réflexe ;p

@Lutinore : oui mais ça n'empêche pas l'erreur d'initialisation (car le développeur est si étourdit)

----------------------------
C++ forever
C# amateur
Commenter la réponse de scoubidou944
Messages postés
18
Date d'inscription
lundi 11 janvier 2010
Dernière intervention
21 mai 2010
0
Merci
tu px pas override tes deux min max, et a la place des Object, dans l'un tu mets int, et dans l'autre float?
Commenter la réponse de patatasux
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
7
0
Merci
Quand tu overrides tu gardes la même signature. Tu ne peux donc pas transformer object en int ou float.


---
mon blog
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Commenter la réponse de cs_GG29
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Dernière intervention
19 janvier 2017
0
Merci
Oui en effet, j'ai du faire comme ça.
(je me dis qu'en .NET1 ça aurait été le plan galère ;p)

----------------------------
C++ forever
C# amateur
Commenter la réponse de scoubidou944

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.