2009-10-23 8 views
0

J'essaie de comprendre comment fonctionne l'implémentation de l'attribut Now dans DateTime. Mon arrière-plan est principalement Python et Haskell, donc je ne peux pas par ma vie comprendre comment l'attribut Now peut "renvoyer" des valeurs différentes en fonction du moment où vous l'utilisez. Mon intuition dit que Now devrait vraiment être une fonction qui fait de la magie de bas niveau suivie d'un peu de magie de haut niveau, puis renvoie un objet DateTime avec l'heure correcte.C#: Comment DateTime.Now peut-il être juste un attribut?

+0

C'est l'un des rares endroits (sinon le seul endroit) dans le cadre qui va à l'encontre de la convention ... – Will

Répondre

15

DateTime.Now n'est pas un attribut, c'est une propriété readonly statique.

Sous les couvertures, une propriété readonly est simplement un appel de fonction qui renvoie une valeur, ce qui lui permet d'effectuer toute la quantité de traitement souhaitée.

Espérons que cela aide.

+0

Bien sûr, j'aurais dû y penser! Merci. –

+0

Oui, c'est la même chose pour 'DateTime.Today',' DateTime.UtcNow' –

4

Il est pas un attribut, il est une propriété statique sur la classe DateTime qui ressemble à ce qui suit:

public static DateTime Now 
{ 
    get 
    { 
     return UtcNow.ToLocalTime(); 
    } 
} 

UtcNow est une autre propriété sur DateTime qui renvoie les éléments suivants:

return new DateTime((ulong) ((GetSystemTimeAsFileTime() + 
    0x701ce1722770000L) | 0x4000000000000000L)); 

GetSystemTimeAsFileTime est un appel API Windows.

Questions connexes