Qu'est-ce que le { get; set; } syntaxe en C#?
Je suis en apprentissage ASP.NET MVC et je peux lire des documents en anglais, mais je ne comprends pas vraiment ce qui se passe dans ce code:
public class Genre
{
public string Name { get; set; }
}
Qu'est-ce que cela signifie: { get; set; }
?
- double possible de Qu'est-ce que cela signifie ? public Nom {get; set;}
- En général, souvenez-vous-setters rendre votre objet mutable, une mauvaise idée. les accesseurs violent "Dites-le à un objet qu'à faire, ne pas lui demander de l'information et de manipuler vous-même". Donc, en général, ne pas ajouter les setters et getters par défaut. Vous en aurez besoin, souvent, mais vous devriez toujours trouver un réel besoin avant de les ajouter. En particulier, les poseurs ne devrait jamais être utilisée dans le code de production (s'Efforcer pour l'immuabilité dans la mesure du possible, et lorsque la mutation est nécessaire, vous devriez demander à muter pour vous, pas de définir une valeur).
- Juste pour ajouter quelque chose... Si vous ne mettez pas
{get; set;}
de la création d'un Domaine mais si vous mettez le{get; set;}
de la création d'un Propriétés. Ayant une propriété pourrait rendre les choses plus facile surtout lorsque l'on travaille avec la Réflexion. - à l'aide d'un get-setter crée un Champ trop, mais celui-ci est caché, a déclaré que privé et modifié par l'auto créé propriétés; tout cela fait par le compilateur.
- ne sont pas auto propriétés à l'encontre du but de champs privés?
Vous devez vous connecter pour publier un commentaire.
C'est un soi-disant auto propriété, et c'est essentiellement un raccourci pour la suite (le même code sera généré par le compilateur):
=
de l'opérateur, mais seulement pour un élément particulier, à droite?public string name;
ou est-ce une mauvaise pratique de faire propriétés publiques?name
. Pourquoi ne devrions-nous pas utiliser les champs? Parce qu'ils se cassent de l'encapsulation.value
est un mot clé réservé et rempli automatiquement par l'appel? donc, je diraisName = "blah"
etvalue
prend sur "bla", qui est ensuite affecté à la privéname
? Comment fonctionne le typage de travail?value
vient de. Si cela vient de là où je pense que ça vient, puis il me semble un mauvais choix de conception pour la langue.name
est créé. Si vous avez essayé de faire référence à cette variable privée au sein de la classe, ce sera un échec. Je ne suis pas sûr de savoir comment C#, mais il se comporte comme s'il n'y est une variable privée n'ayant pas de nom, ce qui vous ne pouvez pas accéder à votre code.Donc si je comprends bien
{ get; set; }
est un "auto propriété", qui tout comme @Klaus et @Brandon dit est une abréviation de l'écriture d'une propriété avec un "champ de stockage." Donc dans ce cas:Toutefois, si vous êtes comme moi - environ une heure ago - vous ne comprenez pas vraiment ce que propriétés et accesseurs sont, et vous n'avez pas la meilleure compréhension de certains termes élémentaires soit. Le réseau est un excellent outil pour l'apprentissage des trucs comme ça, mais c'est pas toujours facile à comprendre pour les débutants. Donc, je vais essayer de vous expliquer cela plus en profondeur ici.
get
etset
sont accesseurs, ce qui signifie qu'ils sont en mesure d'accéder à des données et des informations dans privé champs (généralement à partir d'un champ de stockage) et, généralement, faire de public propriétés (comme vous pouvez le voir dans l'exemple ci-dessus).On ne peut nier que la déclaration ci-dessus est assez déroutant, alors allons-y quelques exemples. Disons que ce code fait référence à des genres de musique. Donc à l'intérieur de la classe, de Genre, que nous allons différents genres de musique. Disons que nous voulons avoir 3 genres: Hip-Hop, de Rock et de Country. Pour ce faire, nous utiliserons le nom de la Classe de créer de nouveaux instances de cette classe.
Maintenant que nous avons créé les instances du Genre, de classe, nous pouvons définir le genre des noms en utilisant le Nom de l' propriété qui a été mis en chemin jusqu'à ci-dessus.
Nous pouvons définir le nom de " g1 " pour le Hip-Hop par l'écriture de la suite de
Ce qui se passe ici est une sorte de complexe. Comme je l'ai dit avant,
get
etset
accéder aux informations à partir des champs privés que vous ne seriez pas en mesure d'accéder.get
ne peut lire des informations en provenance du domaine privé et de le retourner.set
ne peut écrire de l'information dans ce domaine privé. Mais en ayant une propriété avec deuxget
etset
nous sommes en mesure de faire de ces fonctions. Et par l'écritureg1.Name = "Hip Hop";
nous sommes plus particulièrement à l'aide de laset
fonction du Nom de la propriétéset
utilise une variable implicite appelévalue
. Fondamentalement, ce que cela signifie est que vous voyez de la "valeur" dansset
, c'est en référence à une variable, la valeur "variable". Lorsque nous écrivons,g1.Name =
nous sommes à l'aide de la=
de passer dans levalue
variable qui dans ce cas est"Hip Hop"
. De sorte que vous pouvez essentiellement pensez-y comme ça:Il est Important de noter que l'exemple ci-dessus n'est pas écrit dans le code. C'est plus d'une hypothétique code qui représente ce qu'il se passe en arrière-plan.
Alors maintenant que nous avons ensemble le Nom de la g1 instance de Genre, je crois que nous pouvons obtenir le nom par écrit
et si nous avons couru ce que nous aurions
"Hip Hop"
dans notre console.Donc, pour les fins de cette explication, je vais compléter l'exemple avec les sorties ainsi
De sortie:
set{name = value;} // 'value' here is equal to "Hip Hop"
get
etset
méthodes. Le lien que j'ai fourni a une excellente citation de John Guttag en haut de la page. Je vous recommande de lire son livre ou même de prendre la ce cours en ligne gratuitpublic class Genre{public string Name;}
au lieu de :public class Genre{ public string Name { get; set; }}
. Je veux dire, Pourquoi avons-nous besoin d' { get; set; }?Ceux qui sont automatique propriétés
Fondamentalement, une autre façon d'écrire une propriété avec un champ de stockage.
get
, et a persisté à l'aide deset
). Comme l'armoire à quiget
etset
ouvre la porte de la._name
. Dans le automatique des biens, la sauvegarde de champ est caché.C'est le court façon de faire:
C'est un raccourci pour exposer des données les membres du public de sorte que vous n'avez pas besoin de créer explicitement une des données privées des membres. C# se crée une donnée membre privée pour vous.
Vous pourriez juste faire vos données les membres du public sans l'aide de ce raccourci mais alors, si vous avez décidé de changer la mise en œuvre du membre de données à une certaine logique, alors vous auriez besoin pour briser l'interface. Donc en bref c'est un raccourci pour créer plus flexible de code.
En gros, c'est un raccourci de:
Son un auto-mise en œuvre de la propriété pour C#.
get; set;
est appelé?null
comme toutstring
variable jusqu'àsomeInstanceOfGenere.Name = "someValue"
Ils sont les accesseurs pour le public Nom de la propriété.
Vous de les utiliser pour obtenir/définir la valeur de cette propriété dans une instance de Genre.
Qui est une Auto-mise en œuvre de la Propriété. En gros, c'est une manière de sténographie de la création de propriétés d'une classe en C#, sans avoir à définir des variables privées pour eux. Ils sont généralement utilisés lorsque aucune logique supplémentaire est requis lors de l'obtention ou de réglage de la valeur d'une variable.
Vous pouvez en lire plus sur le site MSDN de Les Propriétés Implémentées Automatiquement Guide De Programmation.
- Ce que cela signifie que si vous créez une variable de type Genre, vous serez en mesure d'accéder à la variable en tant que propriété
Les get/set modèle fournit une structure qui permet de logique pour être ajouté lors de la création ("set") ou de récupération ('get') d'une propriété instance d'un instancié de la classe, ce qui peut être utile lorsque l'instanciation de la logique est nécessaire pour le bien.
Une propriété peut avoir un 'get' accesseur seulement, ce qui est fait dans le but de faire de cette propriété en lecture seule
Lors de la mise en œuvre d'un get/set modèle, une variable intermédiaire est utilisé comme un récipient dans lequel une valeur peut être mis en place et une valeur extraite. La variable intermédiaire est généralement précédé d'un trait de soulignement.
cette variable intermédiaire est privé afin de s'assurer qu'il ne peut être accédé par l'intermédiaire de son get/set appels. Voir la réponse de Brandon, comme sa réponse démontre le plus couramment utilisé des conventions de syntaxe pour la mise en œuvre get/set.
Tels
{ get; set; }
syntaxe est appelé automatique de propriétés, C# 3.0 syntaxeVous devez utiliser Visual C# 2008 /scc v3.5 ou au-dessus de la compilation.
Mais vous pouvez compiler sortie qui cible aussi bas que .NET Framework 2.0 (pas d'exécution ou de classes nécessaires pour prendre en charge cette fonctionnalité).
Dans Visual Studio, si vous définissez une propriété
X
dans une classe et que vous souhaitez utiliser cette classe uniquement comme un type, après la construction de votre projet, vous obtiendrez un avertissement qui dit que Champ"X n'est jamais affecté, et a toujours sa valeur par défaut".Par l'ajout d'un
{ get; set; }
àX
de la propriété, vous n'obtiendrez pas cet avertissement.En plus dans Visual Studio 2013 et le haut des versions, en ajoutant
{ get; set; }
vous êtes en mesure de voir toutes les références de cette propriété.Get set sont des modificateurs d'accès à la propriété.
Obtenez lit le domaine de la propriété.
Détermine la valeur de la propriété.
Obtenez de l'est comme de l'accès en Lecture seule.
Ensemble, c'est comme un accès en Écriture seule.
Utiliser la propriété comme en lecture et en écriture à la fois get et set doit être utilisé.
Obtenir est appelée lorsque la propriété apparaît sur le côté droit (RHS)
Ensemble est appelé lorsque la propriété apparaît sur le côté gauche (LHS)
de '=' symbole
Pour une auto-mise en œuvre des biens, la sauvegarde de travaux de terrain derrière la scène et n'est pas visible.
Exemple:
Alors que pour un non auto-mise en œuvre de la propriété le champ de stockage est franc, visible comme un privé d'étendue variable.
Exemple:
Aussi, il est intéressant de noter ici est le "getter" et "setter" peut utiliser les différentes "la sauvegarde de champ'
C'est en fait un raccourci. Vous pouvez écrire
public string Name { get; set; }
comme dans beaucoup d'exemples, mais vous pouvez aussi l'écrire:Pourquoi est-il utilisé? Il peut être utilisé pour filtrer l'accès à une propriété, par exemple, vous ne voulez pas les noms pour inclure des numéros.
Laissez-moi vous donner un exemple:
Officiellement ses Propriétés Implémentées automatiquement et à sa bonne habitude de lire le (guide de programmation).
Je vous recommande aussi de la vidéo tutoriel C# Propriétés: Pourquoi utiliser "get" et "set".