2017-05-08 6 views
0

Récemment, j'ai adopté un moyen pratique pour vous assurer que les membres de la structure arborescente sont conscients de leur nœud parent:Création d'une instance dans la méthode get parameter? modèle connu ou?

private metaCollection<metaPage> _servicePages; 
/// <summary> 
/// Registry of service pages used by this document 
/// </summary> 
[Category("metaDocument")] 
[DisplayName("servicePages")] 
[Description("Registry of service pages used by this document")] 
public metaCollection<metaPage> servicePages 
{ 
    get 
     { 
     if (_servicePages == null) { 
      _servicePages = new metaCollection<metaPage>(); 
      _servicePages.parent = this; 
     } 
     return _servicePages; 
    } 
} 

(le concept est de créer une instance pour le champ privé au sein de la propriété obtenir méthode)

J'aimerais savoir si ce modèle a un nom commun? et plus encore: y a-t-il des problèmes connus/de mauvaises implications sur une telle pratique?

Merci!

+3

Un peu pertinent à votre question (notez la partie sur "initialisation paresseuse"): https://softwareengineering.stackexchange.com/questions/82377/should-properties-have-side-effects – hatchet

+1

Je peux sentir votre excitation, mais non, il n'est pas un nom commun connu pour cela, ni un motif, parce que vous voyez a) il n'est pas très répandu, b) seulement vous le savez, et c) c'est plutôt trivial. –

+1

Je suis confus avec votre notion "seulement vous le savez" - pour moi semble impossible personne n'a fait face à la question de la cohérence des arbres et l'a résolu comme ça. D'un autre côté, s'il est vrai que vous dites que personne ne l'utilise, ce n'est pas très répandu - je suis encore plus inquiet à propos des problèmes potentiels qui pourraient survenir plus tard. – hardyVeles

Répondre

1

Oui, cela s'appelle Lazy Initialization. Dans l'exemple sur la Wikipedia Lazy Loading page:

initialisation Lazy

Article principal: Lazy initialization

Avec initialisation paresseuse, l'objet à charger paresseusement est réglé à null, et chaque demande de objet vérifie null et le crée "à la volée" avant de le renvoyer en premier, comme dans cet exemple C#:

private int myWidgetID; 
private Widget myWidget = null; 

public Widget MyWidget 
{ 
    get 
    { 
     if (myWidget == null) 
     { 
      myWidget = Widget.Load(myWidgetID); 
     }  

     return myWidget; 
    } 
}