2009-12-30 2 views
1

Lorsque vous référencez des propriétés de classe à partir d'une fonction dans la classe, utilisez-vous la valeur de la propriété réelle ou la valeur de la variable privée?Utilisation de la valeur de la variable privée ou de la propriété réelle dans les fonctions de classe?

Quelle est la meilleure solution? Pourquoi?

public class 

    private m_Foo as double 

    public property Foo() as double 
    get 
     return m_Foo 
    end get 
    set(byval value as double) 
     m_Foo = value 
    end set 
    end property 

    public function bar() as double 
    Dim x as double = 5 * m_Foo 
    Dim y as double = 3 * Foo 
    end function 

end class 

Répondre

7

Personnellement, j'essaie d'utiliser le get/accesseur jeu chaque fois que possible, pour éviter de me surprendre quand je change leur logique et place tout à coup où j'accéder au champ privé ne fonctionne pas comme prévu.

3

Le code de propriété peut contenir - maintenant ou dans le futur - une logique qui renvoie une valeur différente ou définit une valeur différente en fonction de l'état de l'objet. Il est logique d'utiliser la propriété.

+2

Et, si vous êtes dans le habitude d'utiliser des propriétés automatiques, vous n'avez pas le choix. –

1

Je préfère ce dernier. Si votre propriété renvoie simplement le champ, le compilateur optimisera vos appels. Et vous devez vous protéger contre vos propres changements comme tout le monde. Que faire si la propriété fait quelque chose plus tard sur le terrain avant de le retourner, vous devez mettre à jour tout votre code interne pour s'adapter.

+0

+1 pour mentionner l'optimisation de l'inlining. Lorsque vous prenez cela en considération, la question devient vraiment «pourquoi ne pas utiliser la propriété? (Mis à part le cas évident lorsque vous utilisez un paramètre ref) – Josh

1

Il est probablement plus sûr (mais pas mieux) pour utiliser la propriété juste au cas où vous ajoutez plus de logique get plus tard. Bien sûr, ajouter la logique à get pour quelque chose qui hier était une propriété «simple» n'est probablement pas une bonne idée.

+0

Exactement ce que je pensais. Changer le comportement d'une propriété pourrait être une mauvaise idée, ce qui, bien sûr, soulève une autre question, combien la logique devrait être dans une propriété? –

+0

Le changement peut survenir lors du refactoring, pendant le prototypage, pendant toute phase précédant la production. –

0

Souvent, la propriété contient une logique simple, que vous pouvez manquer en accédant directement à la variable.

Si vous accédez directement à _someList, vous pouvez lancer une référence nulle. L'accès direct à la propriété garantit qu'elle a été initialisée. Certains pourraient argumenter que la variable privée aurait dû simplement être déclarée comme nouvelle en premier lieu, ou être initialisée dans le constructeur plutôt que la propriété - mais cela devrait au moins mettre en évidence un problème possible car il s'agit d'une approche courante.

Questions connexes