39 votes

Propriétés par rapport aux champs: besoin d'aide pour comprendre l'utilisation des propriétés sur les champs

Tout d'abord, j'ai lu à travers une liste de publications sur ce sujet et je ne crois pas, j'ai saisi les propriétés, car de ce que j'avais appris à comprendre au sujet de l'encapsulation et les modificateurs de champ (privé, public..ect).

L'un des principaux aspects de C# que je viens d'apprendre, c'est l'importance de la protection des données au sein de votre code par l'utilisation de l'encapsulation. J' "pensée" j'ai compris que pour être en raison de la capacité de l'utilisation des modificateurs (public, privé, interne, protégé). Cependant, après avoir appris que les propriétés je suis déjà un peu déchiré dans la compréhension non seulement des propriétés utilisations, mais dans l'ensemble, l'importance et la capacité de protection des données (ce que j'ai compris que l'encapsulation) dans C#.

Pour être plus précis, tout ce que j'ai lu quand je suis arrivé à propriétés en C#, c'est que vous essayez de les utiliser à la place de champs lorsque vous pouvez en raison de:

1) ils vous permettent de modifier le type de données lorsque vous ne pouvez pas directement accès au domaine directement en.

2) ils ajoutent un niveau de protection de l'accès aux données

Cependant, de ce que j'ai "pensée" j'avais appris à connaître à propos de l'utilisation de modificateurs de champ n' #2, il me semblait que les propriétés qui vient d'être généré de code supplémentaire, à moins d'avoir une raison pour changer le type (#1) - parce que vous êtes (plus ou moins) la création d'caché méthodes pour accéder aux champs plutôt que directement.

Il y a ensuite toute les modificateurs peuvent être ajoutés à des Propriétés qui complique ma compréhension de la nécessité de propriétés pour accéder aux données.

J'ai lu un certain nombre de chapitres de différents auteurs sur "propriétés" et aucun n'a vraiment expliqué une bonne compréhension des propriétés contre les champs contre l'encapsulation (et de bonnes méthodes de programmation).

Quelqu'un peut m'expliquer:

1) pourquoi je veux utiliser les propriétés au lieu de champs (surtout quand il semble que je suis juste en ajoutant un code supplémentaire

2) des conseils sur la façon de reconnaître l'utilisation de propriétés et de ne pas les voir comme de simples méthodes (à l'exception de la get;set est évident) lors du traçage d'autres peuples code?

3) des règles générales d'or quand il s'agit de la bonne méthode de programmation par rapport à quand utiliser quoi?

Merci et désolé pour le long post, je ne voulais pas juste de poser une question qui a été posée 100 fois, sans expliquer pourquoi je demande à nouveau.

22voto

Kevin Points 57797

1) pourquoi je veux utiliser les propriétés au lieu de champs (surtout quand il semble que je suis juste en ajoutant d'autres code

Vous devriez toujours utiliser les propriétés lorsque cela est possible. Ils abstraite d'un accès direct sur le terrain (qui est créé pour vous si vous ne créez pas un). Même si la propriété n'est rien d'autre que la définition de la valeur, il peut vous protéger plus tard. La modification d'une zone à une propriété plus tard, c'est une rupture de changer, donc si vous avez un champ public et que vous souhaitez le changer pour un bien public, vous devez recompiler tout le code qui à l'origine eu accès à ce champ.

2) des conseils sur la façon de reconnaître l'utilisation de propriétés et de ne pas les voir aussi simplement des méthodes (à l'exception de le get;set est évident) lorsque traçage d'autres peuples code?

Je ne suis pas totalement certain de ce que vous demandez, mais lorsque des recherches sur quelqu'un d'autre code, vous devez toujours supposons que la propriété est en train de faire autre chose que simplement obtenir et régler une valeur. Bien qu'il est de pratique courante, pour ne pas mettre de grandes quantités de code dans les méthodes de lecture et de définition, vous ne pouvez pas simplement supposer que puisque c'est une propriété qu'il se comporte rapidement.

3) des règles générales de pouce quand il vient à de bonnes méthodes de programmation rapport à quand utiliser quoi?

J'ai toujours utiliser les propriétés de méthodes get et set lorsque cela est possible. De cette façon, je peux ajouter un code plus tard si j'ai besoin de vérifier que la valeur est à l'intérieur de certaines limites, pas null etc. Sans l'aide des propriétés, je dois revenir en arrière et de mettre ces contrôles dans tous les endroits où je accéder directement au champ.

11voto

Daniel Dyson Points 9913

Une des belles choses au sujet de Propriétés, c'est que le getter et le setter peut avoir différents niveaux d'accès. Réfléchissez à ceci:

public class MyClass {

  public string MyString { get; private set; }

  //...other code
}

Cette propriété ne peut être modifié à partir dans les, dire dans un constructeur. À lire sur l'Injection de Dépendance. Constructeur de l'injection et de la Propriété d'injection à traiter avec la définition des propriétés d'une certaine forme de configuration externe. Il existe de nombreux frameworks là-bas. Si vous plonger dans certains de ceux-ci, vous aurez une bonne idée de propriétés et de leur utilisation. L'injection de dépendance sera également vous aider avec votre 3ème question sur les bonnes pratiques.

Lorsque l'on regarde d'autres personnes de code, vous pouvez dire si quelque chose est une méthode ou une propriété en raison de leurs icônes sont différentes. Aussi, dans Intellisence, la première partie d'un bien résumé est le mot de la Propriété.

10voto

GvS Points 28137

Vous ne devriez pas vous soucier du code supplémentaire nécessaire pour accéder à des champs via les propriétés, il va être "optimisé" par le compilateur JIT (par l'in-lining le code). Sauf quand il est trop grand pour être incorporé, mais alors vous avez besoin d'un code supplémentaire de toute façon.

Et le code supplémentaire pour la définition des propriétés simples est également moindre:

public int MyProp { get; set; } // use auto generated field.

Lorsque vous avez besoin de personnaliser , vous pouvez toujours définir votre propre domaine plus tard.

Donc, vous êtes de gauche avec la couche supplémentaire de l'encapsulation sur la protection des données, et c'est une bonne chose.

Ma règle: exposer les champs toujours par le biais des propriétés

8voto

ChrisF Points 74295

1) Il y a plusieurs raisons pourquoi vous pourriez vouloir utiliser les Propriétés sur les Champs, ici sont juste un couple:

a) Par les suivants

public string MyProperty { get; private set; }

vous faites le bien "lecture seule". Personne à l'aide de votre code peut modifier la valeur. Il y a des cas où cela n'est pas strictement vrai (si votre propriété est une liste), mais ceux-ci sont connus et ont des solutions.

b) Si vous décidez que vous avez besoin pour augmenter la sécurité de votre code à utiliser des propriétés:

public string MyProperty
{
    get { return _myField; }
    set
    {
        if (!string.IsNullOrEmpty(value))
        {
            _myField = value;
        }
    }
}

2) Vous pouvez dire qu'ils sont les propriétés, car ils n'ont pas (). Le compilateur va vous dire si vous essayez d'ajouter entre parenthèses.

3) Il est considéré comme une bonne pratique de toujours utiliser les propriétés.

3voto

dbemerlin Points 6257

Il existe de nombreux scénarios où l'utilisation d'un champ simple ne causerait pas de dommages, mais
une propriété peut être modifiée plus facilement plus tard, c'est-à-dire si vous souhaitez ajouter un événement chaque fois que la valeur change ou si vous souhaitez effectuer une vérification de valeur / plage.

De plus, si vous avez plusieurs projets qui dépendent les uns des autres, vous devez recompiler tous ceux qui dépendent de celui où un champ a été changé en propriété.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X