Quel est le but de accesseurs?
Quelqu'un peut-il m'aider à comprendre les get
& set
?
Pourquoi sont-elles nécessaires? Je peux juste faire une variable publique.
Ce qui est avec le rampant vers le bas à droit de vote?
je pense que c'est parce que les gens à améliorer leurs réponses, et (mon hypothèse) parce que les opinions dissidentes, entrent en collision et d'autres de corriger les downvotes plus tard.
Je +1 à votre commentaire. J'ai un peu de sérieux votes contre comme je l'ai été de raffinage de ma réponse.
Si rien d'autre, @Ken a un joli canonique définition de
cela dépend du sens de "nouveaux arrivants". Peut-être qu'il a besoin d'un plus épuisant de réponse sur les principes de base de l'OO.
je pense que c'est parce que les gens à améliorer leurs réponses, et (mon hypothèse) parce que les opinions dissidentes, entrent en collision et d'autres de corriger les downvotes plus tard.
Je +1 à votre commentaire. J'ai un peu de sérieux votes contre comme je l'ai été de raffinage de ma réponse.
Si rien d'autre, @Ken a un joli canonique définition de
get; set;
accesseurs.cela dépend du sens de "nouveaux arrivants". Peut-être qu'il a besoin d'un plus épuisant de réponse sur les principes de base de l'OO.
OriginalL'auteur MasterMastic | 2011-07-01
Vous devez vous connecter pour publier un commentaire.
Avertissement: je suis en supposant que vous avez déjà savoir sur la programmation orientée objet.
Ce sont propriétés?
Propriétés sont des éléments de la langue qui vous permettent d'éviter la répétition
getXYZ()
accesseurs etsetXYZ()
mutateurs techniques trouvées dans d'autres langages, comme Java.Pourquoi existent-elles?
Ils visent à résoudre les problèmes suivants:
Disant
get
etset
au début de chaque accès ou la mutation d'une valeur est ennuyeux et gênant.En Java, vous dites souvent:
et de façon cohérente dire:
Après un certain temps, le
get
etset
devenir assez ennuyeux.Offrant un accès direct à la variable réelle des pauses d'encapsulation, ce qui n'est pas une option.
Comment sont-ils utilisés?
Ils sont utilisé tout comme les variables. Vous lire/écrire pour eux, tout comme les variables.
Comment sont-ils créés?
Ils sont créé que les méthodes. Vous définissez une paire de méthodes:
Retourne la valeur actuelle de la propriété. Souvent, ce n'est rien de plus que quelque chose comme ce qui suit:
Définir la valeur de la propriété:
Autres notes:
Propriétés implémentées automatiquement
C# 3.0 a introduit des propriétés implémentées automatiquement:
Ceci est équivalent à:
Pourquoi existe-t-elle?
Il vous aide à en évitant les dernières modifications de client exécutables.
Disons que vous êtes paresseux et ne veulent pas le type de l'ensemble de la chose, et de décider d'exposer une variable public. Ensuite, vous créez un fichier exécutable qui lit ou écrit à ce champ. Puis vous changez d'avis et décidez que vous avez en fait besoin d'une propriété, donc, vous le remplacez par un.
Ce qui se passe?
La fonction exécutable pauses, parce que le code n'est plus valide.
Propriétés implémentées automatiquement vous aider à éviter que, sans une redondance dans votre code initial.
Indexeurs
Indexeurs étendre la syntaxe de la propriété pour vous permettre de indice objets (surprise!), tout comme les tableaux.
Pour le C++ utilisateurs: Ceci est similaire à la surcharge
operator []
.Exemple:
Vous ensuite de les utiliser comme
obj[5] = 10;
, ce qui est équivalent à l'appel de laset
méthode deobj
's de l'indexeur.En fait,
System.Collections.Generic.List<T>
est indexé:N'est pas soigné? 🙂
Autre chose?
Il y a beaucoup plus de fonctionnalités à des propriétés, qui ne sont pas tous disponibles en C#:
Merci. 🙂 J'ai été un peu occupé quand j'ai écrit l'original de réponse, je n'avais pas le temps pour une explication complète... content que ce est la meilleure.
Merci pour la réponse, mais pourquoi devrais-je utiliser get{} set{}, au lieu simplement à l'aide de l'opérateur'='?
Vous créer (c'est à dire définir) propriétés avec
get
etset
. Vous utilisation avec=
. Ils n'ont pas à se substituer les uns aux autres.Ne vous inquiétez pas à propos de mon temps, si nous ne voulons pas de réponse, nous ne serions pas sur ce site. 🙂 Oui, vous pouvez encore modifier la valeur. Mais vous pouvez effectuer arbitraire vérifie sur la valeur lorsque vous utilisez une propriété, si vous n'avez pas aucun de contrôle sur ce qui se passe quand vous exposer un champ. C'est une grosse différence.
OriginalL'auteur Mehrdad
Elles sont appelées Accesseurs
http://msdn.microsoft.com/en-us/library/w86s7x04.aspx
Puis dans l'incarnation de C# 3, vous pouvez faire tout cela beaucoup plus facile grâce à l'auto-propriétés
http://msdn.microsoft.com/en-us/library/bb384054.aspx
Désolé @John, était encore de raffinage ma réponse quand vous en bas voté.
il n'est pas .NET 3.5, qui permet de faire les propriétés implémentées automatiquement, c'est une langue fonctionnalité introduite avec C# 3. VB n'ont pas eu cette capacité jusqu'à VB10, qui fonctionne sur .NET 4.0.
+1. En fait, il a répondu à la question. Les accesseurs et Mutateurs sont à peine une fonctionnalité qui a changé beaucoup de choses, et il a même évoqué des choses qui ont changé. Vous devez sérieusement chill out.
la documentation est mal, alors. 🙁
set
est un mutateur, pas accesseur (ce n'est pas accéder à quoi que ce soit... ça n'a aucun sens logique).OriginalL'auteur Chase Florell
Propriétés agir comme accesseurs de l'état interne d'un objet, masquage de la mise en œuvre de cet état.
Ainsi, par exemple, vous pouvez avoir un nom de propriété dans une classe
Afin que toute personne utilisant la classe n'a pas besoin de savoir comment le premier nom est stocké, ils savent qu'ils peuvent obtenir une représentation sous forme de chaîne. En ajoutant un ensemble vous pouvez également ajouter une mutateur, quelque chose qui change des objets dans l'état interne
Encore une fois, vous êtes toujours isoler la façon dont le premier nom est stocké en interne (encapsulation), mais les utilisateurs peuvent le modifier en passant une chaîne.
OriginalL'auteur blowdart
Tout simplement,
get
etset
accesseurs sont les fonctions appelées sur un Bien; c'est, lorsque vous récupérez la valeur, ou lorsque vous définissez. Il oblige à un type de comportement sur la façon dont les valeurs sont récupérées ou de l'ensemble.Par exemple, vous voudrez peut-être avoir un mécanisme pour obtenir/définir des mots de passe. En général, vous ne voulez comparer le hash d'un mot de passe au lieu de stocker des choses en clair, si vous avez de la lecture de la variable à récupérer le hash stocké, et le setter prendrait la condition d'entrée et de hachage pour le stockage.
Voici ce que je veux dire:
value
est la variable prévue pour le setter de ce qui a été donné dans la variable d'affectation. par exemple:someuser.Password = "blah";
OriginalL'auteur doctorless
Get et set sont utilisés dans des propriétés. Chacun peut être public, protected ou private. Semblable à accesseur et mutateur méthodes, elles permettent à certains de calcul lorsque le code tente d'accéder à/de mutation de la propriété. Bien sûr, aussi longtemps que vous définissez l'une des get/set, l'autre est facultative.
Exemple sans propriétés:
Avec des propriétés:
la seule chose que je peux deviner que vous avez dit "semblables à des accesseurs et des mutateurs" quand ils de en fait des accesseurs et des mutateurs :-s
Je dirais que j'ai dit semblable à l'accès ou et mutateur méthodes. Je ne voudrais pas envisager des méthodes get et set.
OriginalL'auteur K Mehta
get{} set{} sont accesseurs qui offrent la possibilité de facilement lire et à écrire aux champs privés. Travailler avec un exemple simple:
Dans ce cas, le Bar est un bien public qui a un getter et un setter qui permet d'accéder à la zone privée _bar qui seraient autrement inaccessibles au-delà de la classe Foo.
Maintenant dans une classe qui a un instace de Toto, vous pouvez le faire:
De sorte que le public accesseur vous permet de définir la valeur du champ privé de retour dans Foo.
Espère que ça aide!
Je ne suis pas le downvoter, mais les champs ne doivent pas être privés. Les accesseurs n'avez même pas besoin d'accéder aux champs.
OriginalL'auteur Khepri