Dans une application .NET, quand dois-je utiliser les propriétés "ReadOnly" et quand dois-je utiliser simplement "Get". Quelle est la différence entre ces deux.
private readonly double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
ou
private double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
public double FuelConsumption => Fuel;
Réponses:
La création d'une propriété avec uniquement un getter rend votre propriété en lecture seule pour tout code en dehors de la classe.
Vous pouvez cependant modifier la valeur à l'aide des méthodes fournies par votre classe:
Définir le champ privé de votre classe comme
readonly
vous permet de définir la valeur du champ une seule fois (à l'aide d'une affectation en ligne ou dans le constructeur de classe). Vous ne pourrez pas le modifier plus tard.readonly
Les champs de classe sont souvent utilisés pour les variables qui sont initialisées lors de la construction de la classe et ne seront jamais modifiés par la suite.En bref, si vous devez vous assurer que la valeur de votre propriété ne sera jamais modifiée de l'extérieur, mais que vous devez être en mesure de la modifier à partir de votre code de classe, utilisez une propriété "Get-only".
Si vous avez besoin de stocker une valeur qui ne changera jamais une fois sa valeur initiale définie, utilisez un
readonly
champ.la source
À partir de C # 6, vous pouvez déclarer et initialiser une `` propriété automatique en lecture seule '' sur une seule ligne:
Vous pouvez définir la valeur à partir du constructeur mais pas d'autres méthodes.
la source
Une propriété qui n'a qu'un getter est dite en lecture seule. Car aucun setter n'est fourni, pour changer la valeur de la propriété (de l'extérieur).
C # a un mot-clé en lecture seule , qui peut être utilisé sur les champs (pas les propriétés). Un champ marqué comme "lecture seule" ne peut être défini qu'une seule fois lors de la construction d'un objet (dans le constructeur).
la source
Les propriétés readonly sont utilisées pour créer un code de sécurité. j'aime beaucoup la série de publications d'encapsulation de Mark Seemann sur les propriétés et les champs de sauvegarde:
http://blog.ploeh.dk/2011/05/24/PokayokeDesignFromSmellToFragrance.aspx
tiré de l'exemple de Mark:
dans cet exemple, vous utilisez le champ de nom en lecture seule pour vous assurer que l'invariant de classe est toujours valide. dans ce cas, le compositeur de classe voulait s'assurer que le champ de nom est défini une seule fois (immuable) et est toujours présent.
la source
Les méthodes suggèrent que quelque chose doit se produire pour renvoyer la valeur, les propriétés suggèrent que la valeur est déjà là. C'est une règle de base, parfois vous voudrez peut-être une propriété qui fait un peu de travail (c'est-à-dire
Count
), mais en général, c'est un moyen utile de décider.la source