Des chercheurs danois et suédois en sciences informatiques et systèmes autonomes ont décortiqué la sécurité...
Nvidia se prépare à livrer la plate-forme serveur HGX-2 qui sera capable d'exploiter la puissance de 16 GPU Tesla V100...
L'EMD, une école de commerce située à Marseille ouvre à la prochaine rentrée l'école du numérique...
get
est utilisé pour retourner la valeur de la propriété et un accesseur de propriété set
est utilisé pour
affecter une nouvelle valeur.
Ces accesseurs peuvent avoir différents niveaux d'accès.
value
est utilisé pour définir la valeur assignée par l'accesseur set
.get
et un accesseur set
),
en lecture seule (elles ont un accesseur get
, mais pas d'accesseur set
) ou en écriture seule (elles ont un accesseur set
, mais pas d'accesseur get
).
Les propriétés en écriture seule sont rares et sont généralement utilisées pour restreindre l'accès aux données sensibles.
get
retourne la valeur du champ privé et l'accesseur set
peut effectuer une validation des données avant d'assigner une valeur au champ privé.
Les deux accesseurs peuvent également effectuer des opérations de conversion ou de calcul sur les données avant de stocker ou retourner les données.
L'exemple suivant illustre ce modèle. Dans cet exemple, la classe TimePeriod
représente un intervalle de temps.
La classe stocke l'intervalle de temps en secondes, en interne, dans un champ privé nommé _seconds
.
L'utilisateur peut éventuellement spécifier l'intervalle de temps en heures à l'aide de la propriété en lecture-écriture Hours
.
Les deux accesseurs de propriété get
et set
effectuent ensuite la conversion nécessaire des heures en secondes.
De plus, l'accesseur set
valide les données et lève une exception ArgumentOutOfRangeException
si le nombre d'heures n'est pas valide.expression-bodied
.
Les définitions de corps d'expression se composent du symbole =>
suivi de l'expression à assigner à la propriété ou à récupérer de la propriété.
à partir de C# 6, les propriétés en lecture seule peuvent implémenter l'accesseur get
en tant que membre expression-bodied
.
Dans ce cas, le mot clé d'accesseur get
et le mot clé return
ne sont pas utilisés.
L'exemple suivant implémente la propriété en lecture seule Name
en tant que membre expression-bodied
.get
et set
peuvent être implémentés comme membres expression-bodied
.
Dans ce cas, les mots clés get
et set
doivent être spécifiés.
L'exemple suivant illustre l'utilisation de définitions de corps d'expression pour les deux accesseurs.
Notez que le mot clé return
n'est pas utilisé avec l'accesseur get
.get
et set
ne font qu'assigner une valeur à un champ de stockage,
ou récupérer une valeur d'un champ de stockage, sans inclure de logique supplémentaire. En utilisant des propriétés implémentées automatiquement,
vous simplifiez votre code, tout en laissant le compilateur C# fournir le champ de stockage de manière transparente.
Si une propriété a les accesseurs get
et set
, tous deux doivent être implémentés automatiquement.
Vous définissez une propriété implémentée automatiquement à l'aide des mots clés get
et set
sans fournir d'implémentation.
L'exemple suivant est identique à l'exemple précédent, sauf qu'il utilise les propriétés implémentées automatiquement Name
et Price
.
Notez que l'exemple supprime également le constructeur paramétrable pour que les objets SaleItem
soient initialisés avec un
appel au constructeur par défaut et un initialiseur d'objet.get
et/ou un accesseur set
.
Le bloc de code correspondant à l'accesseur get
est exécuté à la lecture de la propriété; le bloc de code correspondant à l'accesseur set
est exécuté au moment où une nouvelle valeur est assignée à la propriété.
Une propriété sans accesseur set
est considérée comme étant en lecture seule. Une propriété sans accesseur get
est considérée comme étant en écriture seule.
Une propriété qui possède les deux accesseurs est en lecture-écriture.ref
ou out
.get
et/ou un accesseur set
, par exemple :Month
est déclaré en tant que propriété pour permettre à l'accesseur set
de vérifier que la valeur définie de Month
se trouve bien entre 1
et 12
.
La propriété Month
utilise un champ privé pour assurer le suivi de la valeur réelle.
L'emplacement réel des données d'une propriété est souvent appelé "magasin de stockage" de la propriété.
Il est courant que les propriétés utilisent des champs privés comme magasin de stockage.
Le champ est marqué comme étant privé pour garantir qu'il ne peut être modifié qu'en appelant la propriété.
Pour plus d'informations sur les restrictions d'accès public
et private
.get
ressemble à celui d'une méthode. Il doit retourner une valeur du type de la propriété.
L'exécution de l'accesseur get
revient à lire la valeur du champ. Par exemple, quand vous retournez la variable privée de l'accesseur get
et que les optimisations sont activées,
l'appel à la méthode de l'accesseur get
est intégré (inline) par le compilateur, si bien qu'il n'existe aucune surcharge d'appel de méthode.
Cependant, une méthode d'accesseur get
virtuelle ne peut pas être inline, car le compilateur ne sait pas au moment de la compilation quelle méthode peut être
effectivement appelée au moment de l'exécution. Voici un exemple d'accesseur get
qui retourne la valeur d'un champ privé name
:get
est appelé pour lire la valeur de la propriété. Par exemple :get
doit se terminer dans une instruction return
ou throw
et le contrôle ne peut pas déborder du corps de l'accesseur.get
n'est pas un style de programmation approprié. Par exemple, l'accesseur suivant s'accompagne d'un effet secondaire,
à savoir que l'état de l'objet est modifié chaque fois que le champ number
fait l'objet d'un accès.get
peut être utilisé pour retourner la valeur du champ ou pour la calculer et la retourner. Par exemple :Name
, elle retourne la valeur NA
.set
ressemble à une méthode dont le type de retour est void
.
Il utilise un paramètre implicite nommé value
, dont le type est celui de la propriété.
Dans l'exemple ci-dessous, un accesseur set
est ajouté à la propriété Name
:set
est appelé en utilisant un argument qui fournit la nouvelle valeur, par exemple :value
, pour une déclaration de variable locale dans un accesseur set.public
, private
, protected
, internal
, protected internal
ou private protected
.
Ces modificateurs d'accès définissent comment les utilisateurs de la classe peuvent accéder à la propriété.
Les accesseurs get
et set
d'une même propriété peuvent avoir des modificateurs d'accès différents.get
peut être public
pour autoriser l'accès en lecture seule en dehors du type, tandis que l'accesseur set
peut être private
ou protected
.
Une propriété peut être déclarée en tant que propriété statique à l'aide du mot clé static
.
La propriété devient ainsi accessible à tout moment aux appelants, même s'il n'existe aucune instance de la classe. virtual
.
Cela permet aux classes dérivées de substituer le comportement de la propriété à l'aide du mot clé override
.sealed
, ce qui signifie que pour les classes dérivées, elle n'est plus virtuelle.
Enfin, une propriété peut être déclarée comme étant abstract
.
Cela signifie qu'il n'existe aucune implémentation dans la classe et que les classes dérivées doivent écrire leur propre implémentation.virtual
, abstract
ou override
sur un accesseur de propriété static
.
NumberOfEmployees
de 1 et affiche le nom et le numéro de l'employé.Name
de la classe dérivée masque la propriété Name
de la classe de base
.
En pareil cas, le modificateur new
est utilisé dans la déclaration de la propriété de la classe dérivée :Employee
) est utilisée pour accéder à la propriété masquée de la classe de base :Cube
et Square
, implémentent une classe abstract
, /code>Shape, et remplacent sa propriété Area abstract
.
Notez l'utilisation du modificateur override
sur les propriétés.
Le programme accepte le côté side
comme entrée et calcule les surfaces areas
du carré square
et du cube
.
De même, il accepte la surface area
comme entrée et calcule le côté side
correspondant du carré square
et du cube
.IEmployee
a une propriété en lecture-écriture, Name
, et une propriété en lecture seule, Counter
.
La classe Employee
implémente l'interface IEmployee
et utilise ces deux propriétés.
Le programme lit le nom d'un nouvel employé et le nombre actuel d'employés et affiche le nom de l'employé et le nombre d'employés calculé.Employee
implémente deux interfaces, ICitizen
et IEmployee
, et que les deux interfaces ont la même propriété Name
,
l'implémentation de membre d'interface explicite est nécessaire. Autrement dit, la déclaration de propriété suivante :Name
dans l'interface IEmployee
, alors que la déclaration suivante :Name
dans l'interface ICitizen
.get
et set
d'une propriété ou d'un indexeur sont appelées accesseurs.
Par défaut, ces accesseurs ont la visibilité ou le niveau d'accès de la propriété ou de l'indexeur auquel ils appartiennent.
Toutefois, il peut parfois s'avérer utile de restreindre l'accès à l'un de ces accesseurs.
En général, cela implique de restreindre l'accessibilité de l'accesseur set
,
tout en gardant l'accesseur get
publiquement accessible, par exemple :get
et set
. L'accesseur get
reçoit le
niveau d'accessibilité de la propriété elle-même, public
dans le cas présent,
alors que l'accesseur set
est restreint explicitement par l'application du modificateur d'accès protected
à l'accesseur lui-même.set
et get
.
Dans ce cas, le modificateur est autorisé uniquement sur l'un des deux accesseurs.
override
,
le modificateur d'accesseur doit correspondre à l'accesseur de l'accesseur substitué, le cas échant.
get
, l'autre accesseur peut avoir un modificateur d'accès, comme dans l'exemple suivant :BaseClass
, DerivedClass
et MainClass
.
Il y a deux propriétés sur BaseClass
, Name
et Id
sur les deux classes.
L'exemple montre comment la propriété Id
sur DerivedClass
peut être masquée par la propriété Id
sur BaseClass
quand vous
utilisez un modificateur d'accès restrictif tel que protected
ou private
.
Par conséquent, quand vous affectez des valeurs à cette propriété, la propriété sur la classe BaseClass
est appelée à la place.
Le remplacement du modificateur d'accès par public
rend la propriété accessible.private
ou protected
,
sur l'accesseur set
de la propriété Name
dans DerivedClass
empêche l'accès à l'accesseur et
génère une erreur quand vous lui affectez une valeur.set
permet aux membres de données d'être affectés, et l'accesseur get
récupère des valeurs de membres de données.Person
qui possède deux propriétés : Name(string)
et Age(int)
.
Étant donné que les deux propriétés fournissent des accesseurs get
et set
,
elles sont considérées comme des propriétés en lecture / écriture.Name
et Age
sont publiques, et incluent un accesseur get
et un accesseur set
.
Cela permet à n'importe quel objet de lire et d'écrire ces propriétés. Toutefois, il est parfois souhaitable d'exclure l'un des accesseurs.
L'omission de l'accesseur set
, par exemple, met la propriété en lecture seule :private
ou protected
.
set
d'une propriété.
Cette variable contient la valeur que l'utilisateur a spécifiée, par exemple :Age
sur un objet Person
:set
et get
distinctes ont été utilisées pour modeler des propriétés, le code équivalent peut avoir la forme suivante :ToString
est substituée dans cet exemple :ToString
n'est pas utilisée de façon explicite dans le programme.
Elle est appelée par défaut par les appels WriteLine
.get
et set
de la propriété.set
comme étant privé (immuables pour les consommateurs) ou en déclarant uniquement un accesseur get
(immuables partout sauf dans le constructeur).set
comme étant private
.
La propriété peut uniquement être définie dans le type, mais elle est immuable pour les consommateurs.
Vous pouvez autrement déclarer uniquement l'accesseur get
, ce qui rend la propriété immuable partout sauf dans le constructeur du type.set
privé, vous ne pouvez pas utiliser un initialiseur d'objet pour initialiser la propriété.
Vous devez utiliser un constructeur ou une méthode de fabrique.set
privé et l'autre avec un get uniquement.
La première classe utilise un constructeur uniquement pour initialiser les propriétés et la deuxième classe utilise une méthode de fabrique statique qui appelle un constructeur.