1: Ceci est une propriété simple, et peut être utilisé de la même manière qu'un champ public. Si vous avez une raison d'exposer les opérations get
et set
à d'autres utilisateurs (c'est-à-dire, d'autres classes) et que vous n'avez besoin de rien d'extraordinaire, c'est tout. Cela peut aussi être écrit avec « auto-propriétés »,
public static bool isInitialEditMapPageLoad {get;set;} // behaves just like example 1
accessoires automobiles sont beaucoup plus rapides à écrire et à mon avis, sont beaucoup plus lisible que la déclaration complète (si je vois une déclaration complète avec un champ de support, Je m'attends à trouver de la complexité). 2: Ceci montre l'une des raisons des propriétés: utiliser une logique pour retourner une valeur plutôt que de toujours retourner une valeur directement. Quelqu'un peut définir cette valeur comme ils le feraient un champ public quand ils le veulent. Ils peuvent obtenir la valeur quand ils veulent, avec l'avertissement que false
signifie que ce n'est pas la charge initiale OU que l'utilisateur n'est pas autorisé - c'est-à-dire qu'une certaine (simple) logique est effectuée avant de renvoyer une valeur. 3: Ceci se comporte comme un champ public UNIQUEMENT pour la lecture - quelqu'un peut récupérer la valeur, mais ne pas la définir. Ceci est essentiellement une valeur qui est en lecture seulement pour le code externe (à ne pas confondre avec le mot-clé readonly
)
4: Résultat dans une erreur de compilation pour moi. En supposant que ce soit supposé être une déclaration de méthode, définir manuellement un getter comme on le ferait en Java, alors il est similaire à l'exemple 3.Je crois qu'il y a d'autres problèmes qui font que ce n'est pas tout à fait la même chose, comme si vous vouliez transformer cela en une propriété de dépendance, etc. Malheureusement, mes connaissances dans ce domaine sont insuffisantes.
==========
En règle générale, les propriétés de l'utilisateur pour limiter l'accès à vos données de classe. En principe, tout ce que vous pouvez empêcher d'autoriser un autre code à toucher devrait être conservé de cette façon. En pratique, vous voudrez pouvoir définir des valeurs sur les classes pour changer leur affichage, modifier les données représentées, et cetera. Utilisez les propriétés pour maintenir un contrôle maximal de cette interaction.
Si d'autres classes doivent afficher quelque chose dans votre classe, vous devrez exposer un getter, mais pas un setter. Cela n'est pas possible avec les champs, sauf si vous utilisez la méthode Java d'écriture d'une méthode getter personnalisée. Ils vous permettent également d'effectuer des calculs ou des validations avant de retourner ou de définir des données. Par exemple, si vous avez une valeur entière qui doit se situer dans une certaine plage (une plage qui peut changer en fonction de l'état de votre objet, même), vous pouvez vérifier dans setter
que cette condition est remplie avant de mettre à jour votre valeur . Essayez d'éviter le piège consistant simplement à tout paramétrer comme un autoprop - ce n'est pas différent que de tout faire un domaine public. Gardez tout aussi privé que possible. Pas de getters sauf si nécessaire, pas de setters sauf si nécessaire, et les setters doivent effectuer toute petite logique nécessaire pour vérifier l'entrée avant de l'accepter, le cas échéant. Cela dit, évitez l'autre piège: mettre beaucoup de code dans les getters/setters. Si cela prend plus d'une poignée de lignes, vous devriez probablement faire une méthode plutôt qu'une propriété, simplement parce qu'elle donne un meilleur indice aux autres en utilisant votre code que quelque chose de grand va arriver.
Exemple 2 vous avez une erreur stackoverflow;) et l'exemple 4 est incorrect – Gregoire
duplication possible de [C# - Quand utiliser les propriétés au lieu des fonctions] (http://stackoverflow.com/questions/1374273/c-when-to -use-properties-au lieu-de-fonctions), parmi beaucoup d'autres. – Rob
N'a pas vu que .. Bonne prise. – David