2009-07-24 2 views
3
class Bar 
{ 
    private byte[] dg; 

    Bar(byte[] datagram) 
    { 
    dg = datagram; 
    } 

    int Foo 
    { 
    get { return BitConverter.ToInt16(dg, 8); } 
    } 
} 

Quand les propriétés sont-elles évaluées? Au moment où Foo est accédé? Le débogueur évaluant toutes les propriétés me fait peur.Temps d'évaluation des propriétés C#

+3

Il est généralement une mauvaise idée d'avoir un getter de propriété faire un travail approfondi, parce que quelqu'un utilisant votre code supposera que l'évaluation de la propriété sera une opération bon marché. Si ce n'est pas le cas, utilisez une méthode 'GetFoo()'. – Thorarin

+1

Dans cet exemple, je ferais d'abord la conversion, puis je l'enregistrerais pour retourner dans Foo. –

+0

@Ed Swangren Pourquoi enregistrer un tas de conversions si la plupart d'entre eux ne sont jamais utilisés ou seulement utilisés une fois. @Thorarin Je suis d'accord qu'une méthode serait beaucoup plus agréable. Mais avec une bonne documentation, la propriété sera très bien. Si les gens veulent mettre quelque chose d'aussi bête que les propriétés dans une langue, alors je vais les utiliser. –

Répondre

8

Oui, une propriété est simplement du sucre syntaxique pour l'appel à la méthode d'accès get. Chaque fois que la propriété est lue, la méthode s'exécute. Et oui, cela inclut le débogueur (ce qui explique pourquoi si les gettors de votre propriété ont des effets secondaires, le débogage peut réellement affecter le fonctionnement de votre programme).

2

Oui, les propriétés C# sont simplement du sucre syntaxique pour des méthodes spécialisées. Elles sont donc évaluées lorsqu'elles sont appelées, comme tout autre type de méthode d'instance.