Vue d'ensemble des propriétés

Un composant doit définir des propriétés à la place de champs publics, car les concepteurs visuels, tels que Visual Studio, affichent des propriétés et non des champs dans l'Explorateur de propriétés. D'autres raisons irréfutables en faveur de la définition de propriétés sont répertoriées à la fin de cette rubrique.

Les propriétés sont comme des champs intelligents. Une propriété possède généralement une donnée membre privée accompagnée de fonctions d'accesseur et est accédée du point de vue syntaxique comme un champ d'une classe. Même si les propriétés peuvent avoir différents niveaux d'accès, cette rubrique traite spécifiquement du cas le plus fréquent d'accès public. Comme les propriétés étaient déjà disponibles dans plusieurs éditions de Visual Basic, les programmeurs Visual Basic peuvent ignorer cette rubrique.

Une définition de propriété est généralement composée des deux éléments suivants :

  • définition d'une donnée membre privée ;

    private int number = 0;
    
    Private number As Integer = 0
    
  • définition d'une propriété publique à l'aide de la syntaxe de déclaration de propriété. Cette syntaxe associe la donnée membre privée à la propriété publique via les fonctions d'accesseur get et set.

    public int MyNumber 
    {
    // Retrieves the number data member.
    get 
       { 
          return number; 
       }
    // Assigns to the number data member.
    set 
       { 
          number = value;
       }
    }
    
    Public Property MyNumber As Integer
       ' Retrieves number.
       Get 
          Return number
       End Get
       ' Assigns to number.
       Set 
          number = value
       End Set
    End Property
    

Le terme value est un mot clé dans la syntaxe de la définition de propriété. La variable value est assignée à la propriété dans le code d'appel. Le type de value doit être le même que le type déclaré de la propriété à laquelle il est assigné.

Même si une définition de propriété contient généralement une donnée membre privée, cela n'est pas obligatoire. L'accesseur get peut retourner une valeur sans accéder à une donnée membre privée. Une propriété dont la méthode get retourne l'heure système en est un exemple. Les propriétés activent le masquage des données et les méthodes d'accesseur masquent l'implémentation de la propriété.

Il existe des différences de syntaxe des propriétés dans les différents langages de programmation. Par exemple, le terme property n'est pas un mot clé en C#, mais est un mot clé en Visual Basic. Pour plus d'informations spécifiques au langage, consultez la documentation relative à ce langage.

L'exemple suivant définit une propriété nommée MyNumber dans la classe SimpleProperty et accède à MyNumber à partir de la classe UsesSimpleProperty.

public class SimpleProperty 
{
   private int number = 0;
   public int MyNumber 
   {
   // Retrieves the data member number.
   get 
      { 
         return number; 
      }
   // Assigns to the data member number.
   set 
      { 
         number = value;
      }
   } 
// Other members.
}
public class UsesSimpleProperty
{
   public static void Main()
   {
      SimpleProperty example = new SimpleProperty();
// Sets the property.
      example.MyNumber = 5;
// Gets the property.
      int anumber = example.MyNumber;
   }
}
Public Class SimpleProperty 
    Private number As Integer = 0

    Public Property MyNumber As Integer
        ' Retrieves number.
        Get 
            Return number
        End Get
        ' Assigns to number.
        Set 
            number = value
        End Set
    End Property    

' Other members...
End Class

Public Class UsesSimpleProperty
    Public Shared Sub Main()
        Dim example As New SimpleProperty()
        ' Sets the property.
        example.MyNumber = 5
        ' Gets the property.
        Dim anumber As Integer = example.MyNumber
    End Sub
End Class

Les méthodes get et set ne diffèrent généralement pas des autres méthodes. Elles peuvent suivre une logique de programme, lever des exceptions, être substituées et être déclarées avec des modificateurs autorisés par le langage de programmation. Notez toutefois que les propriétés peuvent également être statiques. Si une propriété est statique, le champ d'action des méthodes get et set est limité. Consultez la documentation relative au langage de programmation pour plus d'informations.

Le type d'une propriété peut être un type primitif, une collection de types primitifs, un type défini par l'utilisateur ou une collection de types définis par l'utilisateur. Pour tous les types primitifs, le .NET Framework fournit des convertisseurs de type qui implémentent des conversions de chaîne en valeur. Pour plus d'informations, consultez Conversion de type généralisée. Lorsqu'un convertisseur de type est disponible pour une propriété, il peut être affiché dans l'Explorateur de propriétés du concepteur. Si vous définissez des propriétés personnalisées et que vous souhaitez que l'Explorateur de propriétés les affiche, vous devez implémenter des convertisseurs de type personnalisé.

Si le type de donnée d'une propriété est une énumération, un environnement de développement, tel que Microsoft Visual Studio affichera alors la propriété sous forme de liste déroulante dans la fenêtre Propriétés. Si le type de donnée d'une propriété est une classe qui possède des propriétés, ces propriétés sont appelées des sous-propriétés de la propriété de définition. Dans la fenêtre Propriétés de Visual Studio, un utilisateur peut étendre une propriété pour afficher des sous-propriétés.

Il est important d'ajouter des attributs à des propriétés pour qu'elles s'affichent correctement dans l'Explorateur de propriétés au moment du design. Pour plus d'informations, consultez Attributs en mode design pour les composants.

Vous devez exposer des propriétés à la place des champs publics à partir de vos composants, car les versions des propriétés peuvent être gérées, les propriétés autorisent le masquage des données et les méthodes d'accesseur peuvent exécuter une logique supplémentaire. En raison des optimisations juste-à-temps, les propriétés ne sont généralement pas plus chères que les champs.

Voir aussi

Concepts

Attributs en mode design pour les composants