2011-04-25 3 views
2

Y a-t-il un inconvénient à laisser C# créer les champs de sauvegarde privés qui sont générés en utilisant la création automatique de propriétés (ie {get; set})?Propriétés get/set implémentées automatiquement

Je suis conscient que c'est automatique et donc vous ne pouvez pas personnaliser le get/set, et j'aimerais savoir s'il y a d'autres implications.

Merci!

+1

Pas vraiment un problème. Vous pouvez facilement convertir une propriété automatique en propriété manuelle plus tard, si vous découvrez que vous avez besoin d'une fonctionnalité ou d'une autre. Ce n'est pas un changement de rupture. –

Répondre

4

Si vous utilisez BinaryFormatter, le passage à (ou à partir de) des propriétés implémentées automatiquement est un changement de rupture, car les noms de champ sont importants pour BF. Bien sûr, une solution facile est: n'utilisez pas BF!

Vous ne pouvez pas non plus ajouter d'attributs au champ de support en utilisant les propriétés automatiques.

Aucun initialiseur de champ.

Non vrai readonly pour utilisation avec l'immuabilité.

Vous ne pouvez pas ajouter de logique, évidemment; pas de paresse, de validation, d'effets secondaires ou d'événements de notification. Avec les structures, vous devez appeler :this() sur les constructeurs personnalisés, ce qui est moche.

Sinon, ils sont géniaux. Je suis un grand fan.

6

Le plus gros problème que j'ai rencontré est qu'il est souvent très limitant en regardant des scénarios de liaison. Généralement, lors de l'utilisation de la liaison de données, vous devez implémenter INotifyPropertyChanged qui n'est pas pris en charge par les propriétés automatiques.

2

Le plus gros problème est que vous ne pouvez pas travailler avec les champs de sauvegarde, car ils sont créés par le compilateur. Cela signifie que vous ne pouvez pas les déclarer const ou en lecture seule, cela signifie que vous ne pouvez pas ajouter de logique pour y accéder (initialisation paresseuse, par exemple), etc. La bonne nouvelle est que commencer par l'autoproperty permet au refactor d'utiliser un backing field facile, quand vous avez une raison.

Questions connexes