web-dev-qa-db-fra.com

Que sont les propriétés automatiques en C # et à quoi servent-elles?

Quelqu'un pourrait-il fournir une explication très simple des propriétés automatiques en C #, leur objectif et peut-être quelques exemples? Essayez de garder les choses en termes simples, s'il vous plaît!

44
dennis

Les propriétés automatiques sont utilisées lorsqu'aucune logique supplémentaire n'est requise dans les accesseurs de propriété.
La déclaration ressemblerait à ceci:

public int SomeProperty { get; set; }

Ils ne sont que du sucre syntaxique, vous n'avez donc pas besoin d'écrire le code plus long suivant:

 private int _someField;
 public int SomeProperty 
 {
    get { return _someField;}
    set { _someField = value;}
 }
55
Stecya

Edit: Un peu plus étendus, ils sont utilisés pour faciliter l’installation de variables privées dans la classe, mais leur permettent d’être visibles de l’extérieur de la classe (sans pouvoir les modifier)

Oh, et un autre avantage des propriétés automatiques est que vous pouvez les utiliser dans des interfaces! (Ce qui n'autorise aucune variable de membre)

Avec des propriétés normales, vous pouvez faire quelque chose comme:

private string example;
public string Example 
{
    get { return example; }
    set { example = value; }
}

Les propriétés automatiques vous permettent de créer quelque chose de vraiment concis:

public string Example { get; set; }

Donc, si vous voulez créer un champ où il ne peut être défini que dans la classe, vous pouvez faire:

public string Example { get; private set; }

Cela équivaudrait à:

private string example;
public string Example 
{
    get { return example; }
    private set { example = value; }
}

Ou en Java:

private String example;

public String getExample() {
    return example;
}

public void setExample(String value) {
    example = value;
}

Edit: @Paya m'a également alerté sur:

26
Darkzaelus

Si vous demandez pourquoi vous utiliseriez des propriétés ou des propriétés automatiques, telle est la philosophie de conception qui la sous-tend.

Un principe de conception important est que vous jamais exposez les champs de manière publique, mais que vous accédez toujours à tout via les propriétés. En effet, vous ne pouvez jamais savoir quand un champ est utilisé, et plus important encore, quand il est défini. Maintenant, la plupart du temps, aucun traitement n'est nécessaire lors de la définition ou de l'obtention de la valeur (par exemple, la vérification de la plage). C'est pourquoi les propriétés automatiques ont été créées. Ils constituent un moyen simple et linéaire de créer une propriété. Le magasin de sauvegarde correspondant est créé par le compilateur.

Même si c’est ce que je fais même pour mes programmes internes, c’est probablement plus important pour ceux conçus pour un usage public (vente, open source, etc.). Si vous utilisez une propriété automatique et décidez par la suite que vous devez faire autre chose dans les variables set ou get, vous pouvez facilement modifier votre code sans casser l'interface publique.

10
Jim

Ce ne sont que des raccourcis de code pour sauver le programmeur de quelques frappes. Au lieu de taper tout ceci:

private string _lastName;
public string LastName {
    get {
        return _lastName;
    }
    set {
        _lastName = value;
    }
}  

vous pouvez simplement taper:

public string LastName {
    get; set;
} 

et laissez le compilateur générer le reste automatiquement.

3

From Propriétés implémentées automatiquement (Guide de programmation C #) :

Dans C # 3.0 et ultérieur, les propriétés implémentées automatiquement rendent la déclaration de propriété plus concise lorsqu'aucune logique supplémentaire n'est requise dans les accesseurs de propriété. Ils permettent également au code client de créer des objets.
Lorsque vous déclarez une propriété, le compilateur crée un champ de sauvegarde privé et anonyme accessible uniquement via les accesseurs get et set de la propriété.

class Person
{
       public string Name { get; set; }
}
1
Akram Shahda

Dans les versions précédentes de C #, pour utiliser les propriétés, vous devez créer un champ contenant la valeur (appelé magasin de support):

private string _something;
public string Prop { get { return _something; } }

À partir de C # 3.0, cette exigence n'est plus nécessaire et le compilateur crée automatiquement le magasin de sauvegarde pour vous. Il n'est donc pas nécessaire de déclarer le champ _something.

Vous pouvez en savoir plus sur ce sujet ici: http://msdn.Microsoft.com/en-us/library/bb384054.aspx

J'espère que cela t'aides.

1
lysergic-acid

Simplifiant la réponse acceptée, vous pouvez utilisez aussi :

public int SomeProperty { get; private set; }

Cela a le même effet et vous n'avez plus besoin de créer une autre variable pour cela.

0
Javier Olmedo