-1
votes

Shorthand pour getters et setters?

Il y a tellement de façons d'écrire des getters et des setteurs qu'il me confond. Sont-ce que deux font la même chose? XXX

et si oui, cela me permet de voir cette proportive d'une autre classe tout en me permettant de le modifier?

Merci vous :).


1 commentaires

À partir d'un minuscule de test, il semble que la méthode 2 définit une propriété en lecture seule, il n'aura pas de jeu privé comme dans la méthode 1


3 Réponses :


2
votes

Les getters dans la méthode 1 et 2 sont équivalents. Méthode 1 expose également un seigter qui ne fait rien, ce qui n'est pas tout à fait identique à la méthode 2. Cela conduirait à la confusion, car de la classe de déclaration, il vous permet d'écrire des choses comme xxx Cette ligne ressemble à cela devrait faire quelque chose, le corps du setter est vide, donc ça ne fait rien. Je pense que ce que vous voulez ne serait pas de ne pas spécifier le setter du tout: xxx

si vous faire veux que le setter soit utilisable Privalement, alors vous auriez besoin de définir le corps: xxx


0 commentaires

2
votes

De toute façon, quelqu'un sera en mesure de modifier la liste, comme quand quiconque obtient myListreference = instance.mypublicatliste; , ils obtiennent une référence à myprivatelist

Si vous souhaitez obtenir une copie peu profonde de myprivatelist , vous voudriez faire get => nouvelle liste (myprivatelist); . Cela permettrait de supprimer ou de l'ajout d'éléments dans mylistreference sans affecter myprivatelist .

Mais même alors, c'est simplement une copie peu profonde, donc si les éléments de myListreference sont édités, les mêmes éléments seront modifiés dans MyProvateTelist . Pour éviter cela, vous auriez besoin de faire une copie profonde.

Comment faire exactement sur cette copie profonde dépendrait de la nature exacte de myClass mais vous pouvez apprendre plus d'informations de Cette question , en utilisant une classe qui définit un Copie constructeur .


1 commentaires

Si vous ne devriez pas être en mesure de modifier les entrées des listes, voir aussi readonlycollection et Liste .AsReadonly .. Vous pourriez préférer faire quelque chose comme Public Readonlycollection MyPubliclist => myProvtaelist.Areadonly ();



1
votes
// Option 1
public MyType Member { get; set; }
// Option 2
private MyType _member;
public MyType Member 
{
   get
   {
      return _member;
   }
   set
   {
      _member = value;
   }
}
// Option 3
public MyType Member 
{
   get => _member;
   set => _member = value;
}
// Option 4
public MyType Member => _member; //Only a getter, yet even shorter.

0 commentaires