Impossible de Modifier les Membres de la structure

Je ne suis pas nouvelle à la programmation, mais il semble y avoir un trou dans ma compréhension de C# des structures.

Quelqu'un peut-il expliquer pourquoi le code suivant affiche "Dist1: 0, Dist2: 0"?

struct Distance
{
    public void SetFeet(int feet) { Value = feet; }
    public void SetMiles(float miles) { Value = (int)(miles * 5280f); }
    public int GetFeet() { return Value; }
    public float GetMiles() { return Value / 5280f; }
    private int Value;
}

class Distances
{
    public Distance Dist1 { get; set; }
    public Distance Dist2 { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Distances distances = new Distances();
        distances.Dist1.SetFeet(1000);
        distances.Dist2.SetFeet(2000);

        Console.WriteLine("Dist1: {0}, Dist2: {1}",
            distances.Dist1.GetMiles(),
            distances.Dist2.GetMiles());

        Console.ReadLine();
    }
}
C'est exactement pourquoi il n'est pas une bonne idée d'avoir mutable des structures.
Bien, mais alors comment pourriez-vous mettre en œuvre le code pour affecter une valeur à cette structure lorsqu'il y a plusieurs façons d'interpréter les arguments? (Dans mon cas, je suppose que je pourrais attribuer une int ou float et les ont interprétées comme des pieds et des miles, respectivement, mais mon vrai code a plusieurs façons d'interpréter la valeur sous-jacente.)
Rendre immuable. Que dans, ne pas faire-il possible de changer les valeurs stockées dans votre structure. Regardez les interfaces publiques de valeur existante types dans le cadre et la façon dont ils gèrent "l'évolution des valeurs." Voir: DateTime, String, KeyValuePair<TKey, TValue>. Je pourrais ajouter une réponse si Yahia n'est pas satisfaisante.

OriginalL'auteur Jonathan Wood | 2011-08-27