Question

Dans .NET, si une classe contient un membre qui est un objet de classe, ce membre doit-il être exposé en tant que propriété ou avec une méthode?

Était-ce utile?

La solution

Si vous ne faites qu'exposer une instance d'objet pertinente pour l'état de l'objet actuel, vous devez utiliser une propriété.

Une méthode doit être utilisée lorsque la logique ne sert pas uniquement à accéder à un objet en mémoire et à renvoyer cette valeur, ou lorsque vous effectuez une action ayant une incidence étendue sur l'état de l'objet en cours.

Autres conseils

Vous devez utiliser les propriétés pour tout ce qui représente conceptuellement l'état de l'objet, tant que sa récupération n'est pas une opération assez coûteuse pour éviter de l'utiliser à plusieurs reprises.

De MSDN :

  

Les concepteurs de bibliothèques de classes doivent souvent choisir d'implémenter un membre de classe en tant que propriété ou méthode. En général, les méthodes représentent des actions et les propriétés représentent des données. Utilisez les instructions suivantes pour vous aider à choisir entre ces options.

     
      
  • Utilisez une propriété lorsque le membre est un membre de données logique. Dans les déclarations de membres suivantes, Nom est une propriété, car il s’agit d’un membre logique de la classe.

    public string Name
    get 
    {
        return name;
    }
    set 
    {
        name = value;
    }
    
  •   
  • Utilisez une méthode lorsque:

         
        
    • L'opération est une conversion, telle que Object.ToString.
    •   
    • L'opération est suffisamment chère pour que vous souhaitiez communiquer à l'utilisateur qu'il doit envisager de mettre en cache le résultat.
    •   
    • L'obtention d'une valeur de propriété à l'aide de l'accesseur get aurait un effet secondaire observable.
    •   
    • L'appel du membre deux fois de suite donne des résultats différents.
    •   
    • L'ordre d'exécution est important. Notez que les propriétés d'un type doivent pouvoir être définies et récupérées dans n'importe quel ordre.
    •   
    • Le membre est statique mais renvoie une valeur qui peut être modifiée.
    •   
    • Le membre retourne un tableau. Les propriétés qui renvoient des tableaux peuvent être très trompeuses. Généralement, il est nécessaire de renvoyer une copie du tableau interne afin que l'utilisateur ne puisse pas modifier l'état interne. Ceci, associé au fait qu'un utilisateur peut facilement supposer qu'il s'agit d'une propriété indexée, conduit à un code inefficace. Dans l'exemple de code suivant, chaque appel à la propriété Méthodes crée une copie du tableau. En conséquence, 2n + 1 copies du tableau seront créées dans la boucle suivante.

      Type type = // Get a type.
      for (int i = 0; i < type.Methods.Length; i++)
      {
         if (type.Methods[i].Name.Equals ("text"))
         {
            // Perform some operation.
         }
      }
      
    •   
  •   
     

L'exemple suivant illustre l'utilisation correcte des propriétés et des méthodes.

    class Connection
    {
       // The following three members should be properties
       // because they can be set in any order.
       string DNSName {get{};set{};}
       string UserName {get{};set{};}
       string Password {get{};set{};}

       // The following member should be a method
       // because the order of execution is important.
       // This method cannot be executed until after the 
       // properties have been set.
       bool Execute ();
    }

Cela n'a pas d'importance en la matière.

Il doit s'agir d'une propriété si la valeur contient des détails sur l'état de l'objet.

Ce devrait être Method s'il effectue une action sur l'objet.

Propriété. Une propriété est fondamentalement juste une méthode «bon marché». Obtenir ou définir une référence à un objet est assez bon marché.

Juste pour clarifier, les propriétés sont généralement supposées représenter l'état interne d'un objet. Cependant, la mise en œuvre d'un membre en tant que propriété ou méthode indique à l'utilisateur le coût probable d'un appel.

Les propriétés lisent et attribuent des valeurs aux instances d'une classe.

Les méthodes font quelque chose avec les données assignées à la classe.

Présentation

En règle générale, les propriétés stockent les données d'un objet, tel que Nom , et les méthodes sont des actions qu'un objet peut être invité à effectuer, telles que Déplacer ou Afficher. . Parfois, il n'est pas évident de savoir quels membres de la classe doivent être des propriétés et quelles devraient être des méthodes - la méthode Item d'une classe de collection (VB) stocke et récupère des données et peut être implémentée en tant que propriété indexée. Par ailleurs, il serait également raisonnable de mettre en œuvre Item en tant que méthode.

Syntaxe

La manière dont un membre de la classe va être utilisé peut également être un facteur déterminant pour déterminer si elle doit être représentée comme une propriété ou une méthode. La syntaxe permettant de récupérer des informations à partir d'une propriété paramétrée est presque identique à celle utilisée pour une méthode implémentée en tant que fonction. Cependant, la syntaxe pour modifier une telle valeur est légèrement différente.

Si vous implémentez le membre d'une classe en tant que propriété, vous devez modifier sa valeur de la manière suivante:

ThisObject.ThisProperty (Index) = NewValue

si le membre de la classe est implémenté en tant que méthode, la valeur en cours de modification doit être modifiée à l'aide d'un argument:

ThisObject.ThisProperty (Index, NewValue)

Erreurs

Toute tentative d'attribution d'une valeur à une propriété en lecture seule renverra un message d'erreur différent de celui d'un appel similaire à une méthode. Les membres de classe correctement implémentés renvoient des messages d'erreur plus faciles à interpréter.

J'ai confondu à propos de la propriété using et de la méthode avant. Mais à présent, j'utilise cette règle conformément à la Directive MSDN :

Les méthodes

représentent des actions et les propriétés représentent des données. Les propriétés sont destinées à être utilisées comme des champs, ce qui signifie qu'elles ne doivent pas être complexes du point de vue calcul, ni produire d'effets secondaires. Lorsque cela n’enfreint pas les directives suivantes, envisagez d’utiliser une propriété plutôt que une méthode, car les développeurs moins expérimentés trouvent les propriétés plus faciles à utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top