[C#] Comment faut-il déclarer un évenement de changement de valeur ?
Bonjour,
afin de séparer mon interface graphique de mon modèle, j'ai implémenté dans une classe de mon modèle un évenement de changement de valeur.
Solution1:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public class Data {
private double[] m_Data; // ensemble de données lue
private double m_LastData; // mémorise la dernière valeur lue
public double LastData{
get { return m_LastData;}
private set {
if (m_LastData != value) {
m_LastData = value;
LastValueChanged(this,new EventArgs());
}
}
private AcquireData m_Acquire;
public Data() {
m_Data = new double[1000];
m_Acquire = new AcquireData();
m_Acquire.ReadValue += ChangeData;
}
// Fonction appelé lorsque l'évenement de mise à jour des données
// est envoyé par l'objet m_Acquire
public void ChangeData(object sender, eventargs ev) {
Array.Copy(m_Acquire.DataRead, m_Data, value.Length);
// Mise à jour de la dernière valeur
// L'évenement est automatiquement déclenché
LastData = m_Data[m_Data.Length-1];
}
pubilc event LastValueChangedEventHandler LastValueChanged;
public delegate void LastValueChangedEventHandler(object sender,
EventArgs e);
} |
Lorsque la valeur change, l'évenement est appelé dans la propriété LastData.
La propriété LastData est spécialement crée pour cet évenement.
Solution 2:
Ou alors je crée une classe LastDataChangedEventArgs:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
public class LastDataChangedEventArgs {
private double m_Value;
public double Value {
get { return m_Value;}
}
public LastDataChangedEventArgs (double lastValue) {
m_Value = lastValue;
}
} |
ce qui donnerait dans la méthode ChangeData:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
// Fonction appelé lorsque l'évenement de mise à jour des données
// est envoyé par l'objet m_Acquire
public void ChangeData(object sender, eventargs ev) {
Array.Copy(m_Acquire.DataRead, m_Data, value.Length);
// Mise à jour de la dernière valeur
// L'évenement est automatiquement déclenché
LastValueChanged(this,new LastDataChangedEventArgs(m_Data
[m_Data.Length-1]));
} |
Selon vous qu'est-ce qui est plus propre ?
La solution 1 ou la solution 2 ?
En fait, je me demande si je dois créee un évenement dans lequel je mets en argument la valeur ou si je crée une propriété LastValue qui déclenche l'évenement quand la valeur est réllement modifiée.
Merci pour vos conseils.