Les propriétés sont utilisées pour encapsuler certaines données. Vous pouvez utiliser un champ ordinaire :
public string MyField
Mais ce champ est accessible à tous les utilisateurs extérieurs de votre classe. Les gens peuvent insérer des valeurs illégales ou modifier la valeur d'une manière que vous n'aviez pas prévue.
En utilisant une propriété, vous pouvez encapsuler la manière dont vos données sont accédées. C# dispose d'une belle syntaxe pour transformer un champ en une propriété :
string MyProperty { get; set; }
C'est ce qu'on appelle un propriété auto-implémentée . Lorsque le besoin s'en fait sentir, vous pouvez agrandir votre propriété pour :
string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
Maintenant vous pouvez ajouter du code qui valide la valeur dans votre setter
:
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentNullException();
_myProperty = value;
}
Les propriétés peuvent également avoir des accesseurs différents pour le getter et le setter :
public string MyProperty { get; private set; }
De cette façon, vous créez une propriété qui peut être lue par tout le monde mais qui ne peut être modifiée que par la classe elle-même.
Vous pouvez également ajouter une implémentation complètement personnalisée pour votre getter
:
public string MyProperty
{
get
{
return DateTime.Now.Second.ToString();
}
}
Lorsque C# compile votre propriété auto-implémentée, il génère un langage intermédiaire (IL). Dans votre IL, vous verrez un get_MyProperty
y set_MyProperty
méthode. Il crée également un champ de sauvegarde appelé <MyProperty>k_BackingField
(normalement, ce serait un nom illégal en C# mais en IL, il est valide. De cette façon, vous n'aurez pas de conflits entre les types générés et votre propre code). Cependant, vous devez utiliser la syntaxe officielle des propriétés en C#. Cela crée une expérience plus agréable en C# (par exemple avec IntelliSense).
Par convention, vous ne devriez pas utiliser les propriétés pour les opérations qui prennent beaucoup de temps.