Les variables de constructeur doivent-elles passer directement aux propriétés ou champs privés?

StackOverflow https://stackoverflow.com/questions/131517

  •  02-07-2019
  •  | 
  •  

Question

Maintenant, il s’agit de .NET mais je suis sûr que le principal devrait s’appliquer à tous les langages POO, pour simplifier, prenons .NET comme exemple:

R # généralement constructeur du constructeur et passage de la variable entrante au champ privé, qui pour moi a tendance à passer à Property.

Avez-vous un avis sur les différences et quelle est la meilleure pratique pour cela?

Était-ce utile?

La solution

L'utilisation des propriétés est acceptable tant qu'elles ne sont pas virtuelles / remplacées. Les propriétés sont essentiellement des méthodes et vous ne devez pas appeler des méthodes virtuelles à partir du constructeur, car le type approprié ne sera peut-être pas encore construit. Microsoft a répertorié son ensemble de règles , il suffit de faire défiler l'écran vers le bas. en bas pour voir les instructions et l'extrait de code appropriés illustrant le problème (ils l'illustrent à l'aide de méthodes, mais comme je l'ai mentionné, les propriétés .NET sont essentiellement des méthodes spéciales).

Autres conseils

Le fait de passer le paramètre dans le configurateur de propriétés vous permet de conserver tout code de validation dans un seul endroit.

Je recommanderais de l'envoyer à la propriété, plutôt que directement au champ privé, bien que votre implémentation réelle dicte les conditions exactes. Par exemple, des événements sont parfois déclenchés lorsque vous utilisez la propriété et vous ne souhaitez pas les déclencher lors du constructeur. Ou peut-être souhaitez-vous contourner la logique de propriété pour une autre raison.

Faites attention en utilisant le Property Setter. Vous avez peut-être un code dans le programme qui peut causer des effets secondaires inattendus.

Je manipule des champs à l'intérieur du constructeur. Les champs représentent vraiment l'état inhérent de votre objet et le travail du constructeur consiste à initialiser cet état interne. Les propriétés ne sont là que pour les besoins de l'encapsulation et font partie de l'interface publique avec l'état de l'objet.

La logique de transformation que vous appliquez aux arguments du constructeur ou aux valeurs d'entrée des propriétés avant de définir l'état interne de l'objet peut être très différente. En tout état de cause, si c’était le cas, j’utilisais une méthode de transformation explicite appelée à partir du créateur de propriétés et du constructeur, au lieu de chaîner directement le constructeur sur le créateur de propriétés.

S'il n'y a pas de logique du tout, je ne vois pas pourquoi vous voudriez utiliser le créateur de propriétés à l'intérieur du constructeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top