Utilisez-vous des membres de données ou les propriétés publiques au sein de la classe elle-même?

StackOverflow https://stackoverflow.com/questions/1075988

Question

Si j'ai une configuration simple de classe comme ceci:

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

Que dois-je utiliser, la propriété publique ou le membre de données?

Il est évident que, dans cet exemple, il ne fait pas de différence, car ils ont tous deux référence exactement de la même variable. Mais qu'en est-monde réel utilise des propriétés publiques?

En général, les propriétés publiques ne fonctionnent très peu, dans ce cas, il est OK pour les appeler? Ou bien les gens mettent beaucoup de fonctionnalités dans leurs propriétés publiques qui ne devrait pas être appelé par des références internes de classe?

J'ai vu quelque chose dans un autre post sur ne pas mettre beaucoup de fonctionnalités dans les propriétés, car les examiner dans le Débogueur peut effectuer des résultats inattendus. Est-ce vrai?

Était-ce utile?

La solution

Utilisez la propriété - une logique qui peut être encapsulé dans les setters et getters doit appliquer, même au sein de la classe elle-même. S'il n'y a pas de logique dans les accesseurs, il est toujours pas sûr d'utiliser les champs eux-mêmes parce que si à tout moment vous souhaitez ajouter une logique autour de l'accès à ces champs que vous aurez à factoriser beaucoup plus.

Autres conseils

Je crois que vous devez faire référence à la propriété comme une pratique générale. Bien que dans cet exemple particulier, il ne fait pas vraiment beaucoup de différence, les get / set accesseurs offrent la possibilité de faire un peu plus de travail lors de l'acquisition d'une propriété. Par exemple, beaucoup de notre propriété « get » accesseurs effectuer une recherche au sein d'une structure de données plus complexes ou définir des valeurs par défaut si rien n'a été défini. Alors que le reste de la classe peut tirer profit de cette logique, nous faisons l'habitude d'utiliser les propriétés. Juste pour que nous ne devons pas penser trop dur à ce sujet, nous essayons de généraliser la pratique.

Il peut y avoir des cas où l'on veut accéder directement au membre de données sous-jacentes, mais qui est une décision consciente d'une raison particulière et il tend à être l'exception.

Je préfère les propriétés parce qu'ils gèrent facilement en lecture seule des situations et il est facile de les envelopper avec une validation de base que vous pourriez avoir besoin de le faire.

Si je suis juste retour la valeur de la variable interne, je fais le public variable - il n'y a pas de mal à le faire. Je l'ai toujours utilisé les propriétés publiques quand je veux faire quelque chose en réponse soit à un affichage ou un changement de la valeur - à savoir, écrire à une base de données, définissez aussi autre chose (comme dans la deuxième partie de votre exemple) <. / p>

La question que vous devez poser est de savoir si vous voulez ce qui se passe à l'intérieur de votre classe pour déclencher ces événements. Si vous le faites, de la même manière un appelant externe ne puis accéder aux valeurs via la propriété. Si vous voulez juste lire la valeur, utilisez la variable interne.

Pour répondre à votre question, il n'y a pas de mal à le faire de toute façon -. Juste prise en compte des effets secondaires potentiels

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