Question

Y at-il un benifit à utiliser:

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

Contrairement à utiliser simplement:

public var someProp:String;

Je me rends compte à l'aide getter / setter peut être utile lorsque vous avez besoin ou une transformation ultérieure doivent être informés de lorsque la propriété est modifiée comme ceci:

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

Mais si vous ne avez pas besoin, alors est-il une raison d'utiliser getter / setter sur juste en utilisant un var public?

Merci !!

Était-ce utile?

La solution

En fonction de votre langue, vous devez préférer getter / setter à l'avant parce que vous ne pouvez pas les présenter plus tard (je vous regarde, Java) si elle s'avère que vous ne les avez besoin.

Autres conseils

Cela dépend vraiment un peu la langue / cadre / boîte à outils que vous utilisez -

Cependant, il y a souvent des avantages lors de l'utilisation des accesseurs liés à la compatibilité des versions et des API. Cela peut être une raison très utile de les utiliser, tout seul.

Ce ne peut vraiment pas répondre sans connaître la langue. coûtent plus cher accesseurs dans la plupart des langues, mais ils vous offrent la souplesse sur la route. Dans certaines langues, vous ne pouvez pas changer un public à un Getter / Setter sans changer le code des appelants parce que les changements de syntaxe d'utilisation. Mais ce n'est pas un problème avec C #, que je ce que j'écris dans la plupart du temps.

accesseurs et de mutateurs vous permettent de faire la validation des paramètres. Ils vous permettent de retarder la création d'objets jusqu'à la première référence. Ils ont beaucoup d'avantages, et je les utilise chaque fois que je besoin d'un de ces avantages dès le début.

Mais j'utilise accesseurs seulement quand je besoin d'eux tout de suite, ou quand je suis sûr que je vais avoir besoin de la flexibilité. Sinon, je les considère comme ballonnement.

Comme une note de côté, vous pouvez commencer par un public var et si nécessaire à convertir un getter / setter plus tard dans le code .. en fonction de la langue que vous utilisez.

Si votre propriété est totalement stupide, et n'a pas d'effets secondaires sur le reste de la classe -. Puis par tous les moyens d'exposer tout comme un champ public

Il est juste que dans de nombreux cas, vos propriétés avoir des effets secondaires, donc vous avez besoin de contrôler la façon dont ils sont définis et accessibles.

Par exemple trivial, ce qui se passe si votre variable publique n'est pas sur quelque chose dans votre constructeur? Êtes-vous bien avec cet être retourné comme nul? Ou voulez-vous définir cette variable à quelque chose plutôt que de retourner nulle? Ceci est un exemple simple où un getter personnalisé vaut la peine.

accesseurs et de mutateurs vous donnent aussi plus de contrôle sur quelles valeurs la variable peut être réglée sur.

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

Sans le poseur, la valeur pourrait être mis à zéro et les mauvaises choses pourrait se produire.

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