Attribut de class avec decimal plafonné

Messages postés
32
Date d'inscription
mardi 11 décembre 2018
Statut
Membre
Dernière intervention
2 décembre 2019
-
Bonjour,
J'ai une class nommé midi, avec plusieurs attributs.
Un de mes attributs et un decimal et doit ce comporter ainsi:
1.1 jusqu’à 1.457 une fois passé les 1.457 il passe a 2.1 ect ect .
Auriez-vous une piste, un lien, ect....
Merci d'avance pour vos réponses.
Bonne soirée a +.
Afficher la suite 

3 réponses

Messages postés
1984
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 décembre 2019
79
0
Merci
Bonsoir !
C'est quoi des attributs de classe ?
Moi je connais les champs, les propriétés ,les méthodes et les évènements principalement dans une classe!
On parle d'attribut pour un fichier ( par exemple attribut Readonly pour un fichier en lecture seule)

dragonfly22000
Messages postés
32
Date d'inscription
mardi 11 décembre 2018
Statut
Membre
Dernière intervention
2 décembre 2019
-
Salut vb95,
Déjà merci d'avoir pris le temps de lire ma question et de me répondre.
Je n'ai surement pas utilisé le bon terme en parlant d'attribut.

Voici ma class:
/
using System.ComponentModel;
using System.Data.OleDb;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Lighting_Tools
{

    [DataContract]
    public class Midi : INotifyPropertyChanged
    {
        private int id;
        private int? Notenumber;
        private decimal patch;

        [DataMember]
        public int Id
        {
            get
            {
                return id;
            }

            set
            {
                if (value != id)
                {
                    id = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Id"));
                    }
                }
            }
        }

      
        [DataMember]
        public decimal Patch
        {
            get
            {

                return patch;
            }

            set
            {
                
                if (value != patch)
                {
                    patch = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Patch"));
                    }
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

    }

}


J'aimerais donc pouvoir"plafonner" le décimal patch.
C'est a dire que lorsque l'utilisateur dépasse 1.457 ça repart à 2.1 et ainsi de suite.
Voili voilou n’hésites pas a me dire si c'est pas clair.
Bonne soirée a toi.
A+
Commenter la réponse de vb95
Messages postés
14042
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 décembre 2019
324
0
Merci
Bonjour

attention à la terminologie: [DataMember] est un attribut.
Patch est une propriété.

Il faut que tu calcules entière et la partie décimale de ton nombre.
Pour la partie entière, regarde Math.Floor et pour la partie décimale, c'est la soustraction du nombre et de la partie entière (attention, pour les négatifs, c'est pas math.floor....)

Ensuite si la partie décimale est supérieure à ton seuil tu calcules le nombre suivant à partir de la partie entière.


Attention, tu déclenches systématiquement PropertyChanged, même si la valeur ne change pas. Dans ce cas, si tu as du binding (raison principale pour implémenter INotifyPropertyChanged) tous les contrôles liés à la propriété vont se mettre à jour pour rien.


dragonfly22000
Messages postés
32
Date d'inscription
mardi 11 décembre 2018
Statut
Membre
Dernière intervention
2 décembre 2019
-
Salut Whismeril ,
Merci bien, c'est tres gentil de ta part
-Pour la terminologie c'est noté.
-Pour les PropertyChanged en fait c'est un reste de tuto , je m'en sert pas enfin pour l'instant .........Mais c'est noté également ... si je m'en sert il se mettront a jour pour rien, donc faut que je revois ma copie.


Avant de m'attaquer à la partie pratique de ton explication, j'aurais voulu savoir ou dois je coder ça:
-Dans La partie set de ma propriété?
-Dans La partie get de ma propriété?
-Faire une méthode dans ma classe que j' appel depuis mon MainWindow ?
Désolé si la question peut paraitre stupide.....

Merci encore.
a+
Commenter la réponse de Whismeril
Messages postés
14042
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 décembre 2019
324
0
Merci
La question n'est pas stupide.
Et la réponse, c'est à toi de la "choisir".

Ta classe modélise un truc qui s'appelle midi (la norme de son peut-être ou autre chose, peu importe).
Comme, je ne connais pas tous les tenants et les aboutissants je vais essayé de trouver un exemple.

Une vis a un diamètre, un pas, une longueur, une forme de tête, une taille de tête.
Dans ton programme, ce sera toujours des vis à tête hexagonale, un pas iso et une longueur comprise entre 15 et 30 mm.
Tu peux donc écrire une classe vis, sans spécifier de tête (puisqu'elle ne change pas) avec un pas iso et brider la longuer entre 15 et 30 (plutôt dans le set, ça évite de stocker une valeur incohérente).

Le truc, c'est si un jour, ton programme doit intégrer des tête Torx, faudra réécrire en partie la classe.
Ou encore, dans un autre programme, tu as besoin de vis à bois cruciformes, ben tu ne pourras pas réutiliser ce code.

Une solution, est d'écrire le cas le plus général, une vis ça peut avoir n'importe quel type de tête, et avoir n'importe quelle mesures pour la tête, la longueur, le diamètre etc...
Et puis dans le premier programme de dériver la vis de base en Vis6Pans, qui elle ne peut avoir qu'une tête hexa, on peut éventuellement brider la taille maintenant, mais on peut aussi dériver Vis6Pans, en Vis6Pans1530 qui elle est bridée en taille.

Tu as déjà plusieurs façons de concevoir ta vis.

Mais on peut aussi considérer que toutes les vis existent et que c'est à l'utilisateur de choisir et donc de rejeter les têtes fraisées plates et les vis de 45 mm.

J'ai écrit un tuto basé sur le 1000 bornes, et assez rapidement, j'explique dans la vraie vie, la carte est piochée, prise en main et jouée par le joueur. On peut donc le coder ainsi.

Mais on peut aussi penser que c'est la pioche qui fourni la carte, la main qui la reçoit et le plateau de jeu qui l'accueille à la fin.


En fait, la réponse dépend de comment est pensé le modèle. Si c'est toi qui définit le modèle, alors c'est toi qui a la réponse. Si tu as un cahier des charges, c'est peut-être précisé.



Whismeril
Messages postés
14042
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 décembre 2019
324 -
PS j'ai lu ton code trop vite et en fait tu testes bien que la valeur change avant de déclencher l'évènement.
Commenter la réponse de Whismeril