Oui, les deux d'entre eux sont en lecture seule, mais il y a une différence. Dans la première, il y a un champ de stockage qui est initialisé à 0 avant que le constructeur est exécuté. Vous pouvez changer la valeur que dans le constructeur, comme un champ en lecture seule. La lecture elle-même renvoie simplement la valeur du champ.
Dans la seconde, la lecture retourne 0 à chaque fois, avec pas de domaine en question.
Donc, pour éviter d'utiliser tout mis en place automatiquement des propriétés ou de l'expression du corps des membres à tous, nous avons:
Première version
private readonly int _number = 0;
public int Number { get { return _number; } }
Deuxième version
public int Number { get { return 0; } }
Plus clairement, la différence peut être perçue comme ceci:
public DateTime CreationTime { get; } = DateTime.UtcNow;
public DateTime CurrentTime => DateTime.UtcNow;
Si vous créez un objet unique, de ses CreationTime
propriété donnera toujours le même résultat, car il est stocké dans un champ en lecture seule, initialisé sur la construction de l'objet. Cependant, chaque fois que vous accédez à l' CurrentTime
de la propriété, qui va provoquer l' DateTime.UtcNow
à être évalué, de sorte que vous aurez potentiellement un résultat différent.