J'apprends 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; }
:?
c#
properties
kn3l
la source
la source
{get; set;}
vous créez un champ mais si vous mettez la,{get; set;}
vous créez une propriété . Avoir une propriété peut faciliter certaines choses, surtout lorsque vous travaillez avec Reflection.Réponses:
C'est une soi-disant propriété automatique, et est essentiellement un raccourci pour les éléments suivants (un code similaire sera généré par le compilateur):
la source
=
opérateur, mais seulement pour un élément particulier, non?name
n'est créée. Si vous avez essayé de référencer cette variable privée dans la classe, elle échouera. Je ne sais pas comment C # le fait, mais il se comporte comme s'il y avait une variable privée sans nom, à laquelle vous ne pouvez pas accéder dans votre code.Donc, si je comprends bien, c'est
{ get; set; }
une "propriété automatique" qui, tout comme @Klaus et @Brandon, est un raccourci pour écrire une propriété avec un "champ de sauvegarde". Donc dans ce cas:Cependant, si vous êtes comme moi - il y a environ une heure - vous ne comprenez pas vraiment ce que sont les propriétés et les accesseurs , et vous n'avez pas non plus la meilleure compréhension de certaines terminologies de base. MSDN est un excellent outil pour apprendre des trucs comme celui-ci, mais il n'est pas toujours facile à comprendre pour les débutants. Je vais donc essayer d'expliquer cela plus en profondeur ici.
get
etset
sont des accesseurs , ce qui signifie qu'ils peuvent accéder aux données et aux informations dans des champs privés (généralement à partir d'un champ de support ) et le font généralement à partir de propriétés publiques (comme vous pouvez le voir dans l'exemple ci-dessus).Il est indéniable que la déclaration ci-dessus est assez déroutante, alors allons dans quelques exemples. Disons que ce code fait référence aux genres de musique. Donc, dans la classe Genre, nous allons vouloir différents genres de musique. Disons que nous voulons avoir 3 genres: Hip Hop, Rock et Country. Pour ce faire, nous utiliserions le nom de la classe pour créer de nouvelles instances de cette classe.
Maintenant que nous avons créé les instances de la classe Genre, nous pouvons définir les noms de genre en utilisant la propriété 'Name' qui a été définie ci-dessus.
Nous pouvons définir le nom de «g1» sur Hip Hop en écrivant ce qui suit
Ce qui se passe ici est en quelque sorte complexe. Comme je l'ai déjà dit,
get
etset
accédez à des informations à partir de champs privés auxquels vous ne pourriez pas accéder autrement.get
peut uniquement lire les informations de ce champ privé et les renvoyer.set
ne peut écrire que des informations dans ce domaine privé. Mais en ayant une propriété avec les deuxget
etset
nous pouvons faire ces deux fonctions. Et en écrivant,g1.Name = "Hip Hop";
nous utilisons spécifiquement laset
fonction de notre propriété Nameset
utilise une variable implicite appeléevalue
. Fondamentalement, cela signifie que chaque fois que vous voyez "valeur" à l'intérieurset
, cela fait référence à une variable; la variable "valeur". Lorsque nous écrivons,g1.Name =
nous utilisons le=
pour passer lavalue
variable qui dans ce cas est"Hip Hop"
. Vous pouvez donc essentiellement y penser comme ceci:Il est important de noter que l'exemple ci-dessus n'est pas réellement écrit dans le code. Il s'agit plutôt d'un code hypothétique qui représente ce qui se passe en arrière-plan.
Alors maintenant que nous avons défini le nom de l'instance g1 de Genre , je crois que nous pouvons obtenir le nom en écrivant
et si nous courions cela, nous aurions
"Hip Hop"
dans notre console.Donc, pour les besoins de cette explication, je vais également compléter l'exemple avec des sorties
Production:
la source
set{name = value;} // 'value' here is equal to "Hip Hop"
get
etset
. Le lien que j'ai fourni contient une excellente citation de John Guttag en haut de la page. Je recommanderais de lire son livre ou même de suivre ce cours en ligne gratuitpublic class Genre{public string Name;}
lieu de:public class Genre{ public string Name { get; set; }}
. Je veux dire, pourquoi avons-nous même besoin de {get; ensemble; }?Ce sont des propriétés automatiques
Fondamentalement, une autre façon d'écrire une propriété avec un champ de sauvegarde.
la source
get
et persistéset
). Comme l'armoire à laquelle s'ouvreget
etset
ouvre la porte de._name
. Dans la propriété automatique, le champ de sauvegarde est masqué.Voici la manière courte de procéder:
la source
Il s'agit d'un raccourci pour exposer les membres de données en tant que public afin que vous n'ayez pas besoin de créer explicitement de membres de données privés. C # créera un membre de données privées pour vous.
Vous pouvez simplement rendre vos membres de données publics sans utiliser ce raccourci, mais si vous décidez de modifier l'implémentation du membre de données pour avoir une certaine logique, vous devrez rompre l'interface. Donc, en bref, c'est un raccourci pour créer un code plus flexible.
la source
Fondamentalement, c'est un raccourci de:
la source
C'est une propriété implémentée automatiquement pour C #.
la source
get; set;
son appel?null
comme n'importe quellestring
variable jusqu'àsomeInstanceOfGenere.Name = "someValue"
Ils sont les accesseurs du nom de la propriété publique.
Vous les utiliseriez pour obtenir / définir la valeur de cette propriété dans une instance de Genre.
la source
Il s'agit d'une propriété implémentée automatiquement. Il s'agit essentiellement d'une manière abrégée de créer des propriétés pour une classe en C #, sans avoir à leur définir de variables privées. Ils sont normalement utilisés lorsqu'aucune logique supplémentaire n'est requise lors de l'obtention ou de la définition de la valeur d'une variable.
Vous pouvez en savoir plus sur le Guide de programmation des propriétés implémentées automatiquement de MSDN .
la source
Le modèle get / set fournit une structure qui permet à la logique d'être ajoutée lors de la définition ('set') ou de la récupération ('get') d'une instance de propriété d'une classe instanciée, ce qui peut être utile lorsqu'une logique d'instanciation est requise pour le propriété.
Une propriété ne peut avoir qu'un accesseur 'get', ce qui est fait pour rendre cette propriété en lecture seule
Lors de l'implémentation d'un modèle get / set, une variable intermédiaire est utilisée comme conteneur dans lequel une valeur peut être placée et une valeur extraite. La variable intermédiaire est généralement précédée d'un trait de soulignement. cette variable intermédiaire est privée afin de garantir qu'elle ne soit accessible que via ses appels get / set. Voir la réponse de Brandon, car sa réponse illustre les conventions de syntaxe les plus couramment utilisées pour implémenter get / set.
la source
Cela signifie que si vous créez une variable de type Genre, vous pourrez accéder à la variable en tant que propriété
la source
Cette
{ get; set; }
syntaxe est appelée propriétés automatiques, syntaxe C # 3.0Vous devez utiliser Visual C # 2008 / csc v3.5 ou supérieur pour compiler. Mais vous pouvez compiler une sortie qui cible aussi bas que .NET Framework 2.0 (aucun runtime ou classe requis pour prendre en charge cette fonctionnalité).
la source
Dans Visual Studio, si vous définissez une propriété
X
dans une classe et que vous souhaitez utiliser cette classe uniquement en tant que type, après la génération de votre projet, vous obtiendrez un avertissement indiquant que «le champ X n'est jamais affecté et aura toujours sa valeur par défaut valeur" .En ajoutant un
{ get; set; }
àX
la propriété, vous ne serez pas cet avertissement.De plus, dans Visual Studio 2013 et les versions supérieures, en ajoutant,
{ get; set; }
vous pouvez voir toutes les références à cette propriété.la source
C'est essentiellement un raccourci. Vous pouvez écrire
public string Name { get; set; }
comme dans de nombreux exemples, mais vous pouvez également l'écrire:Pourquoi est-il utilisé? Il peut être utilisé pour filtrer l'accès à une propriété, par exemple, vous ne voulez pas que les noms incluent des nombres.
Laisse moi te donner un exemple:
Officiellement, il s'appelle Propriétés Auto-Implémentées et sa bonne habitude de lire le ( guide de programmation ). Je recommanderais également le didacticiel vidéo Propriétés C #: Pourquoi utiliser "get" et "set" .
la source
Get set sont des modificateurs d'accès à la propriété. Get lit le champ de propriété. Set définit la valeur de la propriété. Obtenir, c'est comme un accès en lecture seule. L'ensemble est comme l'accès en écriture seule. Pour utiliser la propriété en lecture-écriture, get et set doivent être utilisés.
la source
Get est invoqué lorsque la propriété apparaît sur le côté droit (RHS) Set est invoqué lorsque la propriété apparaît sur le côté gauche (LHS) du symbole '='
Pour une propriété implémentée automatiquement, le champ de support fonctionne derrière la scène et n'est pas visible.
Exemple:
Alors que pour une propriété non implémentée automatiquement, le champ de sauvegarde est initial, visible en tant que variable de portée privée.
Exemple:
En outre, il convient de noter ici que le «getter» et le «setter» peuvent utiliser les différents «champs de support»
la source
Définissez les variables privées
À l'intérieur du constructeur et chargez les données
J'ai créé Constant et charge les données de la constante à la classe Liste sélectionnée.
la source
Une propriété est comme une couche qui sépare la variable privée des autres membres d'une classe. Du monde extérieur, on a l'impression qu'une propriété n'est qu'un champ, une propriété est accessible en utilisant .Property
FullName est une propriété. Celui avec une flèche est un raccourci. Du monde extérieur, nous pouvons accéder à FullName comme ceci:
Les appelants ne se soucient pas de la façon dont vous avez implémenté le FullName. Mais à l'intérieur de la classe, vous pouvez modifier FullName comme vous le souhaitez.
Consultez la documentation Microsoft pour une explication plus détaillée:
https://docs.microsoft.com/en-us/dotnet/csharp/properties
la source