77 votes

Sont des propriétés c# en fait les méthodes ?

Jusqu'à présent, j’étais sous l’impression que et sont deux choses différentes en c#. Mais ensuite j’ai fait quelque chose comme ci-dessous.

enter image description here

et il s’agissait d’une « révélation » pour moi. Je m’attendais à une propriété et une méthode , mais au lieu de cela, j’ai obtenu ceci.

Pourquoi cela est-il arrivé ? quelqu'un peut-il expliquer s’il vous plaît.

113voto

dcastro Points 17978

Oui, le compilateur génère une paire de méthodes get et set pour une propriété et une salle de sauvegarde de champ pour une auto-mise en œuvre de la propriété.

public int Age {get; set;}

devient l'équivalent de:

private int <Age>k__BackingField;

public int get_Age()
{
     return <Age>k__BackingField;
}

public void set_Age(int age)
{
    <Age>k__BackingField = age;
}

Le Code qui accède à votre propriété sera compilé pour appeler l'un de ces deux méthodes. C'est exactement une des raisons pour lesquelles la modification d'un champ public à un bien public, c'est une rupture de changement.

Voir Jon Skeet est Pourquoi les Propriétés de la Matière.

24voto

p.s.w.g Points 81433

Strictement parlant, les propriétés ne sont pas des méthodes, même si elles sont en effet pris en charge par des accesseurs et des mutateurs (également appelées accesseurs). Lorsque vous écrivez du code qui ressemble à ceci (à condition de modifier le code pour supprimer l'erreur de compilation mentionné ci-dessous)

myFoo.stringProp = "bar";

Le compilateur génère en fait IL code comme ceci:

ldstr       "bar"
callvirt    foo.set_stringProp

set_stringProp est la méthode de définition de cette propriété. En fait, si vous vous le souhaitez, vous pouvez appeler ces méthodes directement via la réflexion.

Cependant, l'exemple de code que vous avez posté, peut regarder bien dans intellisense de Visual Studio, mais il ne compile pas. Essayez de construire le projet et vous verrez une erreur de ce type:

Le type 'foo' contient déjà une définition pour 'stringProp'

18voto

Tigran Points 41381

C'est visual studio intelicence question, qui reçoit par son nom. Par le moyen de votre code ne compilera pas même, en raison de la collision de noms dans le même type.

Mais vous avez raison, que les propriétés sont des méthodes à la fin:

public class A {

   public string Name  {get;set;}  
}

ici, Name la propriété est converti en 2 méthodes: get_Name() et set_Name().

En fait, si vous définissez la classe comme ceci:

public class A {

   public string Name  {get;set;}  

   public string get_Name() {
       return "aaa"; 
   }
}

vous obtiendrez d'erreur de compilation, comme il existe déjà définis get_Name (propriété)

-1voto

Amir Saniyan Points 2406

Oui. Les propriétés sont mutator méthodes.

En informatique, un mutateur méthode est une méthode utilisée pour contrôler les modifications apportées à une variable. Ils sont également largement connu comme le setter. Souvent un setter est accompagné par un getter (aussi connu comme un accesseur), qui renvoie la valeur de la variable membre privée.

Le mutateur méthode est le plus souvent utilisé en programmation orientée objet, en accord avec le principe d'encapsulation. Selon ce principe, les variables membres d'une classe sont privés de masquer et de protéger des autres et ne peuvent être modifiés que par un membre du public function (la méthode mutateur), qui prend la nouvelle valeur d'un paramètre, éventuellement le valide, et modifie la variable membre privée.

Mutateur méthodes peuvent également être utilisés dans les environnements orientés objet. Dans ce cas, une référence à la variable à modifier, est passé à la mutateur, avec la nouvelle valeur. Dans ce scénario, le compilateur ne peut pas restreindre code de contourner le mutateur méthode et la modification de la variable directement. Il incombe aux développeurs pour assurer la variable est modifié par le biais de la méthode mutateur et non modifiés directement.

Dans les langages de programmation qui les soutiennent, les propriétés offrent une alternative pratique sans renoncer à l'utilité de l'encapsulation.

Référence: http://en.wikipedia.org/wiki/Mutator_method

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