6
votes

Encapsulation de données en C # à l'aide des propriétés

Je pense actuellement à l'encapsulation de données en C # et je suis un peu confus. Il y a des années, lorsque j'ai commencé à apprendre à programmer avec C ++, mon professeur m'a dit: - "Créez une classe et masquez des membres de données informatiques, de sorte qu'il ne peut donc pas être manipulé directement de l'extérieur"

exemple: Vous analysez un fichier XML et stockez les données analysées dans certains membres de données à l'intérieur de la classe d'analyseur.

Maintenant, quand je regarde C #. Vous avez des propriétés là-bas. Cette fonctionnalité rend les données internes / internes d'une classe visible à l'extérieur. Il n'y a plus d'encapsulation. Droite? xxx

de mon point de vue, il n'y a pas de différence entre rendre les membres de données publics ou avoir des propriétés publiques, qui ont des getteurs et des setteurs, où vous transmettez vos membres de données privés à travers .

Quelqu'un peut-il expliquer que s'il vous plaît?

merci


0 commentaires

7 Réponses :


1
votes

Le bénéfice des propriétés est que plus tard, vous pouvez décider d'ajouter une validation, etc. à la méthode de Setter, ou de rendre la méthode getter faire un certain calcul ou une mise en cache, et aucun du code qui n'appelle déjà que votre propriété n'appelle déjà que votre propriété n'aurait besoin de changer. puisque l'interface de classe est restée stable


0 commentaires

16
votes

Les données privées sont encapsulées par la propriété elle-même. Le seul moyen d'accéder aux données est via la propriété.

Dans votre situation ci-dessus, il y a peu de raisons d'utiliser la propriété. Cependant, si vous devez plus tard ajouter une certaine validation, vous pouvez, sans casser l'API, c'est-à-dire :: xxx

N'oubliez pas qu'une propriété, en .NET, n'est vraiment qu'un Syntaxe de nettoyage pour 2 méthodes - une méthode de la section Propriété Get et une pour la section Définir la propriété. Il fournit toute la même encapsulation qu'une paire de méthodes en C ++, mais une syntaxe plus agréable (sans doute) pour l'utilisation.


0 commentaires

1
votes

Il y a toujours une encapsulation de données, si vous en avez besoin pour être. L'encapsulation de données ne consiste pas à la cacher du client de la classe ou de la rendre inaccessible, il s'agit d'assurer une interface cohérente et de l'état d'objet interne.

Disons que vous avez un objet représentant une voiture de quart de bâtonnet et une propriété pour définir la vitesse. Vous savez probablement que vous devriez changer d'engrenages entre les intervalles de vitesse, de sorte que c'est là que l'encapsulation est entrée dans. P>

au lieu de simplement faire le plein public, permettant ainsi un accès public sans vérification, vous pouvez utiliser des getters et des setteurs publics. en C #: P>

class StickShiftCar : Car
{
    public int MilesPerHour
    {
        get {return this._milesPerHour;}

        set 
        {
          if (vaule < 20)
              this._gearPosition = 1;
          else if (value > 30)
              this._gearPosition = 2;
          ...
          ...
          this._milesPerHour = value;
  }
}


0 commentaires

2
votes

Bien que les propriétés ne soient pas l'ouest sauvage que vous les prenez pour être à un premier coup d'œil. La vérité malheureuse de OOP est que beaucoup de vos méthodes sont des getters and Setters, et les propriétés sont simplement un moyen de rendre cela plus facile à écrire. Aussi, vous contrôlez ce que vous souhaitez que la propriété permettait à quelqu'un de faire. Vous pouvez faire une propriété lisible mais pas inscriptible, comme: xxx

ou comme mentionné par Reed, vous pouvez avoir votre méthode de jeu de transformation ou une vérification de toute quantité de complexité. Par exemple, quelque chose comme xxx

Vous avez généralement toute la valeur que vous recevez de l'encapsulation, avec un sucre syntaxique pour faciliter les tâches communes. Vous pouvez faire la même chose que les propriétés font dans d'autres langues, il semble juste différent.


0 commentaires

0
votes

Regardez un peu plus loin, pourquoi votre professeur vous a-t-il dit d'encapsuler? Juste parce que c'est la bonne conception orientée objet? Pourquoi est-ce la bonne façon? Les langages de programmation et les paradigmes sont simplement un moyen de faire face à la complexité d'obtenir un processeur pour exécuter notre code de manière compréhensible. Il y a deux lecteurs de code, la machine et les humains. La machine chargera de manière heureuse des données ou une branche à toute adresse dans l'espace mémoire. Nous, des humains, nous aimons penser aux "choses". Notre cerveau traite des "choses" qui ont des attributs ou qui effectuent des actions. Un lion va vous manger, une lance peut vous défendre, un lion est à fourrure, une lance est pointue. Nous pouvons donc comprendre des programmes s'ils sont modélisés comme des "choses". Les propriétés sont censées modéliser les attributs d'une chose et des méthodes sont censées modéliser les actions. En pratique, cela peut devenir assez flou et tout ne peut pas être modélisé comme une action réelle mondiale, mais les efforts de le faire, une fois bien, peuvent faire un programme compréhensible.


0 commentaires

1
votes

Il vous manque peut-être que vous n'avez pas besoin d'avoir des propriétés pour correspondre à tous les champs de membres de la classe. Vous pouvez décider quelles propriétés d'ajouter à votre classe et qu'ils seront accessibles ou non à l'extérieur de la classe.


0 commentaires

0
votes

La toute première tentative d'utilisation de la propriété pour encapsuler la valeur est obtenue; set; Mais C # fournit une fonctionnalité plus avancée pour enrichir les fonctions à l'intérieur d'obtenir et définir pour rendre la propriété en lecture seule, en écriture uniquement ou à certaines conditions. Par exemple, pour définir la valeur que

public readonly string Temp;


0 commentaires